PHP系列(十三)PHP會話控制
php會話控制
一、cookie
1、會話控制之Cookie概述
cookie是在http協議下,伺服器或指令碼可以維護客戶端資訊的一種方式。
Cookie是一種由伺服器傳送給客戶端的片段資訊,儲存在客戶端瀏覽器的記憶體或者硬碟上。常用於儲存使用者名稱,密碼,個性化設定,個人偏好記錄等。當使用者訪問伺服器時,伺服器可以設定和訪問cookie的資訊。
cookie儲存在客戶端,通常是IE或Firefox瀏覽器的cookie臨時資料夾中,可以手動刪除。注意:如果瀏覽器上cookie太多,超過了系統所允許範圍,瀏覽器也會自動對它進行刪除
2、Cookie的操作
設定Cookie
語法:bool setcookie(string name,[string value,[intexpire,[string path,[stringdomain,[intsecure]]]]]);本cookie函式可以有6個屬性,常用的有3個引數。
//向客戶端傳送一個Cookie,將變數username值為skygao,儲存客戶端一週的時間
setcookie(“username”,”skygao”, time()+60*60*24*7);
//使用setCookie()函式的全部引數設定
setcookie(“username”,”skygao”, time()+60*60*24*7, “/test”,”.example.com”, 1);
setcookie引數解釋
引數描述示例
name 名字呼叫名為cookiename的cookie
value 值假設第一個參為cookiename,通過$_COOKIE[‘name’取得值]
exprice 有效時間設定cookie的過期時間和日期,用一個標準的Unix時間標記,可以用time()函式取得,以秒為單位.
path 範圍伺服器端的有效路徑,設定為“/”表示這個域中所有陣列都可以被訪問讀取。
domain 域名設定cookie有效域名
secure 指明cookie只能通過安全的
https傳送設為true時只能使用安全的https,預設為false,即設定是否僅在https安全連線時才傳送cookie到客戶端,0或1。
讀取Cookie
如果Cookie設定成功,客戶端就擁有了Cookie檔案,用來儲存Web伺服器為其設定的使用者資訊。
在PHP中讀取Cookie資訊很簡單,使用超全域性陣列
$_COOKIE[‘cookie名’]即可獲取cookie中的內容。
<?php
//輸出Cookie中儲存的所有使用者資訊
print_r($_COOKIE);
3、Cookie的陣列形態應用
陣列也可以利用多維陣列的形式,將多個內容值儲存在相同Cookie名稱識別符號下。
<?php
setcookie(“user[username]”,”skygao”); //$_COOKIE[“user”][“username”]
setcookie(“user[password]”,md5(“123456”)); //$_COOKIE[“user”][“password”]
setcookie(“user[email]”,”skyga@lampbrother.net”);//$_COOKIE[“user”][“email”]
//遍歷$_COOKIE[“user”]陣列
foreach($_COOKIE[“user”]as $key => $value){
//輸出Cookie陣列中二維的鍵值對
echo$key.”:”.$value.”
“;
}
4、刪除Cookie
有2種方式刪除Cookie
–1.省略setcookie()函式的所有引數列
–2.設定cookie為已過期
<?php
//只指定Cookie識別名稱一個引數,即刪除客戶端中這個指定名稱的Cookie資料
setCookie(“account”); //第一種方法
//設定Cookie 在當前時間過期,因此係統會自動刪除識別名稱為isLogin的Cookie
setCookie(“isLogin”, “”, time()-1); //第二種方法
二、session
1、會話控制session的工作機制
Session和Cookie相似,都是用來儲存使用者的相關資料。但最大的不同之處在於Cookie是將資料存放在客戶端的計算機之中,而Session則是將資料存放於伺服器系統之下。
cookie和session在php中的使用區別:
– cookie和session都可以暫時儲存在多個頁面中使用的變數,但是它們有本質的差別。
cookie存放在客戶端瀏覽器中,
session儲存在伺服器上。
–它們之間的聯絡是session ID 一般儲存在cookie中,或者放在URL上。
禁用cookie的方法:
–點選IE中的“工具”—“Internet選項”,在彈出的對話方塊裡點選“安全”—“自定義級別”項,將“允許每個對話COOKIE”設為禁用.
2、session的應用
Session的宣告與使用
Session的設定不同於Cookie,必須先啟動,在PHP中必須呼叫session_start()。
session_start()函式的語法格式如下
– Bool session_start(void)
–注意:session_start()函式之前不能有任何輸出
Session以陣列的形式使用
–如:$_SESSION[‘session名’]
session_start(); //啟動Session 的初始化
$_SESSION[“username”]= “skygao”; //註冊Session 變數,賦值為一使用者名稱稱
$_SESSION[“uid”]= 1; //註冊Session 變數,賦值為一個使用者的ID
註冊一個會話變數和讀取Session
在PHP中使用Session變數,除了要啟動之外,還要經過註冊的過程。註冊和讀取Session變數,都要通過訪問$_SESSION陣列完成。
在$_SESSION關聯陣列中的鍵名具有和PHP中普通變數相同的命名規則。
Session變數會被儲存在伺服器端的某個檔案中,該檔案的位置是通過php.ini檔案,在session.save_path屬性指定的目錄下。
登出變數與銷燬Session
1.bool session_destroy(void)
–刪除伺服器端保留session資訊的檔案
2.unset($_SESSION[‘鍵名’])
–刪除記憶體中由Session陣列儲存的變數
–清除所有變數可以使用 $_SESSION=array()
3.如果session是基於Cookie的,那麼我們還需要刪除客戶端保留的cookie檔案
程式碼1:
<?php
//開啟會話session(cookie不用)
//session_start()前面不能有任何輸出, 這個函式向客戶端發一個session_id儲存在cookie中
// 還在伺服器中建立一個和儲存在客戶端同名的session檔案(文字)
session_start();
//使用$_SESSION這個陣列
$_SESSION[`username`]=”jons”;
$_SESSION[`age`]=18;
$_SESSION[`sex`]=”nv”;
$_SESSION[`lx`][`email`]=”mz@aaa.com”;
$_SESSION[`lx`][`phone`]=`119`;
echo $_SESSION[`username`];
程式碼2:
<?php
//開啟session
// 1. 判斷客戶端是否有了sessionid 變數名為PHPSESSID, 直接使用這個session id開啟會話
// 也不新建立檔案了,直接找這個同名session id的session檔案
session_start();
echo `<br>`;
print_r($_SESSION);
echo `<br>`;
echo `<br>`;
echo $_SESSION[`username`];
程式碼3:
<?php
//1開啟會話session 1
session_start();
//多餘的
$username= $_SESSION[`username`];
//unset($_SESSION[`username`]);
//2就可以刪除陣列中的所有內容, 即session對應的這個使用者檔案的內容就空了
$_SESSION= array();
//刪除客戶中cookie聽sessionid
if(isset($_COOKIE[session_name()])){
setCookie(session_name(),””, time()-3600, “/”);
}
//4銷燬session
session_destroy();
echo”再見:{$username}”;
3、Session的配置選項
配置Session
php.ini檔案和Session有關的幾個常用配置選項
– session.auto_start = 0 ; 在請求啟動時初始化session
– session.cache_expire= 180 ; 設定快取中的會話文件在 n 分鐘後過時
– session.cookie_lifetime = 0 ;設定按秒記的cookie的儲存時間,
相當於設定Session的過期時間,為0時表示直到瀏覽器被重啟
– session.auto_start=1,這樣就無需每次使用session之前都要呼叫session_start()。但啟用該選項也有一些限制,如果確實啟用了 session.auto_start,則不能將物件放入會話中,因為類定義必須在啟動會話之前載入以在會話中重建物件。
–session.cookie_path = / ; cookie的有效路徑
–session.cookie_domain = ; cookie的有效域
– session.name =PHPSESSID;用在cookie裡的session的名字
–session.save_handler = files ; 用於儲存/取回資料的控制方式
– session.save_path= /tmp ;在 save_handler 設為檔案時傳給控制器的引數,這是資料檔案將儲存的路徑.
–session.use_cookies = 1 ; 是否使用cookies
4、Session的自動垃圾回收機制
php.ini中相關的配置
– session.cookie_lifetime=0; 關閉瀏覽器相應的cookie檔案即被刪除
– session.gc_maxlifetime=1440;設定過期session時間,預設1440秒(24分鐘)
–session.gc_probability/session.gc_divisor;啟動垃圾回收機制的概率(建議值為1/1000~5000)
程式碼:
//開啟會話session(cookie不用)
//session_start()前面不能有任何輸出, 這個函式向客戶端發一個session_id儲存在cookie中
// 還在伺服器中建立一個和儲存在客戶端同名的session檔案(文字)
// 排程PHP的機制使用session
session_start();
//使用$_SESSION這個陣列
$_SESSION[`username`]=”jons”;
$_SESSION[`age`]=18;
$_SESSION[`sex`]=”nv”;
$_SESSION[`aaaaaaaa`]=”bbbbbbbbbbbbbbb”;
$_SESSION[`lx`][`email`]=”mz@aaa.com”;
$_SESSION[`lx`][`phone`]=`119`;
echosession_name().” = “.session_id().”<br>”;
5、基於URL傳遞session的id
為啥要使用URL傳session id
基於cookie的方式傳遞session id 這種方式更優。
但不總是可用,因為使用者在客戶端可以遮蔽cokie;
什麼是基於url傳session id
是通過url引數進行傳遞
直接將session id嵌入到url中去
引數規則
Session_name()和session_id()應用
常量SID的使用
URL加session id也是自動的
在使用Linux系統做伺服器時,在編輯PHP時,開啟—enable-trans-sid配置選項,和執行時選項session.use_trans_sid=1啟用,在客戶端禁用cookie時,相對的url將被自動修改為包含sessionid, 如果沒有配置,或使用windows系統作為伺服器時,可以使用常量SID.
建議使用Linux並配置好
<form action=”back.php<?php echo SID ?>” method=”post”>
Name:<input type=”input” name=”username”>
Pass:<input type=”password” name=”pass”>
<input type=”submit” name=”send” value=”登入”>
</form>
本文轉自 sswqzx 51CTO部落格,原文連結:http://blog.51cto.com/sswqzx/1975133
相關文章
- PHP系列(一)PHP流程控制結構PHP
- Session會話管理(PHP,Apacha)Session會話PHP
- php中關於會話機制的理解PHP會話
- PHP會話處理相關函式介紹PHP會話函式
- PHP系列(五)PHP字串處理PHP字串
- 白話 CGI,FastCGI,PHP-CGI,PHP-fpmASTPHP
- 大話PHP之效能PHP
- PHP流程控制PHP
- PHP會話(Session)實現使用者登陸功能PHP會話Session
- PHP 系列:PHP Web 開發基礎PHPWeb
- PHP 陣列系列PHP陣列
- PHP 會話(Session)如何實現使用者登陸功能PHP會話Session
- 輕鬆地將PHP會話儲存在MySQL資料庫PHP會話MySql資料庫
- PHP系列(十一)PHP操作mysql(i)資料庫PHPMySql資料庫
- PHP系列(七)PHP錯誤異常處理PHP
- 會話控制利器 gorilla/sessions會話GoSession
- PHP快速上手(04):PHP流程控制語句01PHP
- PHP系列之鉤子PHP
- PHP轉Go系列:字串PHPGo字串
- PHP[快問快答系列]PHP
- Canal PHP[實戰系列]PHP
- PHP系列(十)GD庫PHP
- "白話"PHP檔案包含漏洞PHP
- PHP DIY 系列------框架篇:8. 依賴注入和控制反轉PHP框架依賴注入
- 【會話】Oracle kill session系列會話OracleSession
- PHP程式設計師7小時學會Kotlin系列PHP程式設計師Kotlin
- 使用Spring Security控制會話Spring會話
- PHP學習筆記系列:PHP生成器概覽PHP筆記
- PHP 第十三週函式學習記錄PHP函式
- 大話 PHP 設計模式--建立型PHP設計模式
- WebRTC 系列之音訊會話管理Web音訊會話
- 第十二章 會話控制會話
- 四十三章 PHP 製作資料透視表PHP
- PHP 7 已經發布,你會選擇PHP 7嗎?PHP
- PHP 7終於釋出:開發者會選擇PHP 7嗎?PHP
- php imagecreatefrom* 系列函式之 pngPHP函式
- 《PHP 微服務練兵》系列教程PHP微服務
- PHP轉Go系列:map對映PHPGo