Session
php
Session 指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所通過的這段時間,也數組
就是用戶瀏覽這個網站所花費的時間。從上述的定義中咱們能夠看到,Session 其實是一瀏覽器
個特定的時間概念。 服務器
通常來講,在網站上某一個頁面中的變量(指服務器端變量,下同)是不能在下一頁中用cookie
的,有了session就好辦了。session中註冊的變量能夠做爲全局變量使用。這樣咱們就能夠session
將session用於用戶身份認證,程序狀態記錄,頁面之間參數傳遞。dom
如何建立SESSIONide
使用session以前不能有任何輸出函數
使用session 必須開啓標誌 代碼爲測試
<?php
Session_start();
?>
在PHP中session 會話是保存在一個全局數組中,這個數組爲$_SESSION,你能夠經過增長數
組索引增長會話元素。看例子
<?php
session_start();//開啓session標誌
$_SESSION['USER'] = 'zppx';//設置一個會話元素USER 值爲zppx
$_SESSION['pass'] = 'password';//設置一個會話元素pass 值爲password
?>
將以上代碼保存爲session_1.php,並瀏覽
同時新建一個文件爲session_2.php
代碼爲
<?php
session_start();//開啓session標誌
//查看設置的結果
print_r($_SESSION);
?>
瀏覽能夠查看輸出的結果:
Array ( [USER] => zppx [pass] => password )
說明咱們的會話已經產生做用
如今咱們來看下一個簡單的使用原理
<?php
//簡單的計數器
session_start();
if(!isset($_SESSION['counter'])){
$_SESSION['counter'] = 1;
}else{
$_SESSION['counter'] ++;
}
echo $_SESSION['counter'];
?>
保存爲session_3.php
不斷的瀏覽刷新這個頁面能夠看到值在不斷的變化
如今須要咱們來解釋幾個問題。
1. 如何修改已經保存的session的值呢?
$_SESSION['NAME'] = 'PHP';
2. 銷燬session
session_unset();
session_destroy();
3. 查看sessionid ,session_id()
echo session_id();
4. session編碼與解碼
$string = session_encode();
echo $string;
session_unset();
session_decode($string);
print_r($_SESSION);
session相關參數的解釋
/* *
* session 用來跟蹤用戶的狀態,默認生成sessionid
* session 配置的相關參數
* session_auto_start 開啓session
* session_name 發送到客戶端得session cookie名稱 默認爲 phpsesionid
* session.cookie_lifetime 生命週期
* session.cookie_path 有效路徑 默認「/」不須要需該
* session.cookie_domain 對什麼域名有效
* session_sava_handler session存儲到什麼文件,默認爲 files文件
* session_save_path 存儲路徑
* session_gc_maxlifetime 過時時間
* session.use_trans_sid 跟蹤當COOKIE禁用採用url
* 查看當前會話配置
* session_get_cookie_params();
* session_set_cookie_params();
*
*
*
* */
//print_r(session_get_cookie_params());
COOKIE
cookie 是一種在遠程瀏覽器端儲存數據並以此來跟蹤和識別用戶的機制。
PHP 在http 協議的頭信息裏發送cookie,所以 setcookie() 函數必須在其它信息被輸出到瀏覽器
前調用,這和對 header() 函數的限制相似
cookie 是個很小的 文本文件4kb,當用戶訪問網站時,會當即生成個這樣的文件,保存在
用戶的客戶端
一般以username@domainname保存
* cookie技術
* 1.記錄訪客的信息
* 2.頁面之間傳遞變量
設置cookie
使用 setcookie()函數設置cookie
如 setcookie("visit","php",mktime()+86400,"/")
參數祥解:setcooke(name, value, expires, path , domain, secure);
* cookie 屬性
* 1.name 名字(必須)
* 2.value 值
* 3.expires 過時時間(必須)
* 4.path 設置「/」 表示這個域全部數組均可以訪問
* 5.domain 有效的域名
* 6.secure 布爾值 ,若是爲true 表示只有ssl加密鏈接才發送cookie到客戶端
代碼片斷
<?php
$value = 'szzppx';
setcookie("TestCookie", $value); /* 簡單 cookie設置 */
setcookie("TestCookie", $value, time()+3600); /* 有效期 1個小時 */
setcookie("TestCookie", $value, time()+3600, "/~zppx/",".xxx.com", 1); /* 有效目錄 /~zppx,有
效域名 xxx.com 及其全部子域名 */
?>
Cookie 的讀取:
直接用php 內置超級全局變量$_COOKIE 就能夠讀取瀏覽器端的cookie
以前咱們設置了個visit
如今咱們來讀取
print $_COOKIE[visit];
cookie 的刪除:
只需把有效時間設爲小於當前時間,和把值設置爲空
如:setcookie("visit ", "", time()-1);
常見問題解決:
1) 用 setcookie()時有錯誤提示,多是由於調用setcookie()前面有輸出或空格。也可能你的文
檔是從其餘字符集轉換過來,文檔後面可能帶有 BOM 簽名(就是在文件內容添加一些隱藏
的BOM 字符)。解決的辦法就是使你的文檔不出現這種狀況。還有經過使用ob_start()函數
也能處理一點。
2) $_COOKIE 受magic_quotes_gpc 影響,可能自動轉義。
3) 使用的時候,有必要測試用戶是否支持cookie。
<?php
/* *
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);//修改錯誤提示信息
ini_set('display_errors',true);//設置PHP錯誤提示
*/
if(!isset($_COOKIE['visit'])){
setcookie("visit","php",mktime()+86400,"/") or die("客戶端禁止cookie");
echo "hellow first";
}else{
echo "second";
}
下面爲一個完成的cookie操做類,供後期參考
<?php
class cookieclass{
private $cookiename;
private $cookievalue;
private $cookieexpiry;
public function __construct(){
$num_args = func_num_args();
if($num_args >0){
$args = func_get_args();
$this->cookiename = $args[0];
$this->cookievalue = $args[1];
$this->cookieexpiry = $args[2];
$this->cookieset();
}
}
//設置cookie
public function cookieset(){
try{
if($this->cookiename !="" && $this->cookievalue !="" &&
$this->cookieexpiry !=""){
setcookie($this->cookiename,$this->cookievalue,time()+$this->cookieexpiry);
}else{
throw new exception("你必須對cookie設置個名字和過時時間");
}
}catch(exception $e){
echo $e->getmessage();
}
}
//修改cookie中指定的值
public function change($newvalue){
$_COOKIE[$this->cookiename] = $newvalue;
}
//取得須要的值
public function getvalue(){
return $_COOKIE[$this->cookiename];
}
//刪除某個值
public function remove(){
$this->change("");
}
}
?>
//創建個COOKIE
$mycookie = new cookieclass("cookieid","php","60");
echo $mycookie->getvalue();