《LINUX教學:PHP根據session與cookie用戶登錄狀態操作類的代碼》要點:
本文介紹了LINUX教學:PHP根據session與cookie用戶登錄狀態操作類的代碼,希望對您有用。如果有疑問,可以聯系我們。
?1、用戶登錄狀態操作類UserLogin
<?php final class UserLogin { public function __construct() { } public static function getUserInfo() { if (isset($_COOKIE["user_id"])&&$_COOKIE["user_id"]&&(trim($_COOKIE["user_id"])!="")) { if (isset($_SESSION["USER_INFO"])) return $_SESSION["USER_INFO"]; $dao = new UserDao(); $user = $dao->find($_COOKIE["user_id"]); if ($user) { $_SESSION["USER_INFO"] = $user; setcookie("docloud_sid", session_id(), time() + 36000); setcookie("user_id", $_COOKIE["user_id"], time() + 36000); if (array_key_exists("selected_prj_id", $_COOKIE)) setcookie("selected_prj_id", $_COOKIE["selected_prj_id"], time() + 36000); if (array_key_exists("selected_class_id", $_COOKIE)) setcookie("selected_class_id", $_COOKIE["selected_class_id"], time() + 36000); if (array_key_exists("selected_image_id", $_COOKIE)) setcookie("selected_image_id", $_COOKIE["selected_image_id"], time() + 36000); if (array_key_exists("test_image_ids", $_COOKIE)) setcookie("test_image_ids", $_COOKIE["test_image_ids"], time() + 36000); if (array_key_exists("upload_image_ids", $_COOKIE)) setcookie("upload_image_ids", $_COOKIE["upload_image_ids"], time() + 36000); return $user; } } self::clearCookie(); return null; } public static function setUserInfo($userInfo) { $_SESSION["USER_INFO"] = $userInfo; setcookie("docloud_sid", session_id(), time() + 36000); setcookie("user_id", $userInfo->getId(), time() + 36000); } public static function isLogin() { if (self::getUserInfo()) { return true; } return false; } public static function delUserInfo() { self::clearCookie(); session_destroy(); } private static function clearCookie() { setcookie("docloud_sid", "", time() - 36000); setcookie("user_id", "", time() - 36000); setcookie("selected_prj_id", "", time() - 36000); setcookie("selected_class_id", "", time() - 36000); setcookie("selected_image_id", "", time() - 36000); setcookie("test_image_ids", "", time() - 36000); setcookie("upload_image_ids", "", time() - 36000); } } ?>
2、在用戶輸入用戶名、暗碼處調用來做相關判定
<?php require_once 'Init.php'; // if logged in, logout if (UserLogin::isLogin() && $_COOKIE["user_id"]==1) { UserLogin::delUserInfo(); } else if (UserLogin::isLogin()){ Utils::redirect('welcome'); } $username = null; $password = null; $msg = ""; if (isset($_POST['username']) && isset($_POST['password'])) { $username = addslashes(trim(stripslashes($_POST ['username']))); $password = addslashes(trim(stripslashes($_POST ['password']))); // validate $errors = LoginValidator::validate($username, $password); if (empty($errors)) { // save $dao = new UserDao(); $user = $dao->findByName($username); $last_login_ip = Utils::getIpAddress(); $user->setLastLoginIp($last_login_ip); $now = new DateTime(); $user->setLastLoginTime($now); $dao->save($user); UserLogin::setUserInfo($user); Flash::addFlash('登錄成功!'); Utils::redirect('welcome'); } foreach ($errors as $e) { $msg .= $e->getMessage()."<br>"; } } ?>
一個通過代碼給大家介紹了PHP根據session與cookie用戶登錄狀態操作類的相關知識.
下面給大家補充點知識,Cookies 和 Session的區別
1.cookie 是一種發送到客戶瀏覽器的文本串句柄,并保存在客戶機硬盤上,可以用來在某個WEB站點會話間持久的堅持數據.
2.session其實指的就是訪問者從到達某個特定主頁到離開為止的那段時間. Session其實是利用Cookie進行信息處理的,當用戶首先進行了哀求后,服務端就在用戶瀏覽器上創建了一個Cookie,當這個Session結束時,其實就是意味著這個Cookie就過期了.
注:為這個用戶創建的Cookie的名稱是aspsessionid.這個Cookie的唯一目的就是為每一個用戶提供不同的身份認證.
3.cookie和session的共同之處在于:cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式.
4.cookie 和session的區別是:cookie數據保留在客戶端,session數據保留在服務器端.
簡單的說,當你登錄一個網站的時候,
? 如果web服務器端使用的是session,那么所有的數據都保存在服務器上,客戶端每次哀求服務器的時候會發送當前會話的sessionid,服務器根據當前sessionid判斷相應的用戶數據標志,以確定用戶是否登錄或具有某種權限.由于數據是存儲在服務器上面,所以你不能偽造,但是如果你能夠獲取某個登錄用戶的 sessionid,用特殊的瀏覽器偽造該用戶的哀求也是能夠成功的.sessionid是服務器和客戶端鏈接時候隨機分配的,一般來說是不會有重復,但如果有大量的并發哀求,也不是沒有重復的可能性.
? 如果瀏覽器使用的是cookie,那么所有的數據都保存在瀏覽器端,比如你登錄以后,服務器設置了cookie用戶名,那么當你再次哀求服務器的時候,瀏覽器會將用戶名一塊發送給服務器,這些變量有一定的特殊標記.服務器會解釋為cookie變量,所以只要不關閉瀏覽器,那么cookie變量一直是有效的,所以能夠保證長時間不掉線.如果你能夠截獲某個用戶的 cookie變量,然后偽造一個數據包發送過去,那么服務器還是認為你是合法的.所以,使用 cookie被攻擊的可能性比較大.如果設置了的有效時間,那么它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候,瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然后發送給服務器.如果你在機器上面保存了某個論壇 cookie,有效期是一年,如果有人入侵你的機器,將你的 cookie拷走,然后放在他的瀏覽器的目錄下面,那么他登錄該網站的時候就是用你的的身份登錄的.所以 cookie是可以偽造的.當然,偽造的時候需要主意,直接copy
cookie文件到 cookie目錄,瀏覽器是不認的,他有一個index.dat文件,存儲了 cookie文件的建立時間,以及是否有修改,所以你必須先要有該網站的 cookie文件,并且要從保證時間上騙過瀏覽器
5.兩個都可以用來存私密的東西,同樣也都有有效期的說法,區別在于session是放在服務器上的,過期與否取決于服務期的設定,cookie是存在客戶端的,過去與否可以在cookie生成的時候設置進去.
(1)cookie數據存放在客戶的瀏覽器上,session數據放在服務器上
(2)cookie不是很平安,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙,如果主要考慮到平安應當使用session
(3)session會在一定時間內保存在服務器上.當拜訪增多,會比較占用你服務器的性能,如果主要考慮到減輕服務器性能方面,應當使用COOKIE
(4)單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K.
(5)所以:將登陸信息等重要信息存放為SESSION;其他信息如果需要保存,可以放在COOKIE中
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/6707.html