會話控制是一種面向連接的可靠通信方式,通常根據會話控制記錄判斷用戶登錄的行為。比如:網購和處理郵件時,你可能需要訪問多個頁面,但只要你不退出,在同一個系統上,多個頁面之間互相切換時,還能保持用戶的登錄信息。
但是http是無狀態的協議,不能維護兩個事物之間的狀態。但一個用戶在請求一個頁面以后再請求另外一個頁面時,還要讓服務器知道這是同一個用戶。可以使用cookie和session解決這個問題。
cookies(小甜餅的意思)是一種由服務器發送給客戶端的片段信息,存儲在客戶端瀏覽器的內存或硬盤上,在客戶對該服務的請求中發回它。
格式和描述:
bool setcookie ( string name [, string html' target='_blank'>value [, int expire [, string path [, string domain [, int secure]]]]])
setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace. If output exists prior to calling this function, setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie.
www.it165.net
一個簡單的登錄系統:
<?php if(isset($_GET["out"])){ setcookie('id','');/*刪除cookie,即把其值設為空*/ setcookie('pass',''); echo "<script>location.href='Untitled 5.php'</script>"; } if(isset($_POST["name"])&&isset($_POST["password"])){ setcookie('id',$_POST["name"],time()+3600); setcookie('pass',$_POST["password"],time()+3600); echo "<script>location.href='Untitled 5.php'</script>"; } if(isset($_COOKIE['id'])&&$_COOKIE['pass']){ echo "登陸成功<br />用戶名:".$_COOKIE['id']."<br>密碼:".$_COOKIE['pass']; echo "<br><a href='Untitled 5.php?out=out'>退出</a>"; }?><form action="" method="post"> 用戶: <input type="text" name="name" /><br /><br /> 密碼: <input type="password" name="password" /><br /><br /> <input type='submit' value="登陸" /></form>
session
session的意思是會話,session和cookie都是用來存儲用戶的相關資料,不同之處是session將數據存儲在服務器端。
客戶端僅需要保存由服務器為用戶創建的一個session標識符,稱為sessionID;而在服務器端保存session變量的值。SessionID是一個不會重復,又不容易被找到規律的,由32為十六進制數組成的字符串。如果用戶阻止cookie的使用,則可以將sessionid保存在用戶瀏覽器地址欄的URL中。
當某個用戶想web服務器發出請求時,服務器首先會檢查這個客戶端的請求里是否已經包含了一個sessionID。如果包含,說明之前已經為此用戶創建過sessionID,服務器則按該sessionID,把session檢索出來使用。如果不含,則為該用戶創建一個session,并且生成一個與此session相關的sessionID,在本次響應中被傳送給客戶端保存。
為了避免對服務器的過大消耗,session會因為下面兩種情況而自然消失:
一、用戶關閉瀏覽器。
二、session指定的有效期限到期。一般PHP系統中對于session的生存時間并無定義,默認為0.可以通過修改php.ini配置文件中有關"session.cookie.lift_time"項目,來設定有效期,以秒為單位指定了發送到瀏覽器cookiecookie的生命周期。
和cookie不同,session使用前,必須先調用session_start()函數,以便讓PHP核心程序,將和session相關的內建環境變量預先載入內存。
可使用session_destroy()函數銷毀整個session
將上面的使用cookie的登錄系統修改為使用session:
<?php session_start(); if(isset($_GET["out"])){ unset($_SESSION['id']);/*刪除session中的單個變量*/ unset($_SESSION['pass']); } if(isset($_POST["name"])&&isset($_POST["password"])){ $_SESSION['id']=$_POST["name"]; $_SESSION['pass']=$_POST["password"]; } if(isset($_SESSION['id'])&&$_SESSION['pass']){ echo "登陸成功<br />用戶名:".$_SESSION['id']."<br>密碼:".$_SESSION['pass']; echo "<br><a href='Untitled 5.php?out=out'>退出</a>"; }?><form action="" method="post"> 用戶: <input type="text" name="name" /><br /><br /> 密碼: <input type="password" name="password" /><br /><br /> <input type='submit' value="登陸" /></form>
本文出自 “開心菠菜” 博客
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答