這篇文章主要介紹了PHP如何根據(jù)session與cookie用戶登錄狀態(tài)操作類,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
站在用戶的角度思考問題,與客戶深入溝通,找到阜陽網(wǎng)站設(shè)計與阜陽網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋阜陽地區(qū)。1、用戶登錄狀態(tài)操作類UserLogin
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、在用戶輸入用戶名、密碼處調(diào)用來做相關(guān)判定
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()."
"; } } ?>
一個通過代碼給大家介紹了PHP根據(jù)session與cookie用戶登錄狀態(tài)操作類的相關(guān)知識。
下面給大家補(bǔ)充點(diǎn)知識,Cookies 和 Session的區(qū)別
1.cookie 是一種發(fā)送到客戶瀏覽器的文本串句柄,并保存在客戶機(jī)硬盤上,可以用來在某個WEB站點(diǎn)會話間持久的保持?jǐn)?shù)據(jù)。
2.session其實(shí)指的就是訪問者從到達(dá)某個特定主頁到離開為止的那段時間。 Session其實(shí)是利用Cookie進(jìn)行信息處理的,當(dāng)用戶首先進(jìn)行了請求后,服務(wù)端就在用戶瀏覽器上創(chuàng)建了一個Cookie,當(dāng)這個Session結(jié)束時,其實(shí)就是意味著這個Cookie就過期了。
注:為這個用戶創(chuàng)建的Cookie的名稱是aspsessionid。這個Cookie的目的就是為每一個用戶提供不同的身份認(rèn)證。
3.cookie和session的共同之處在于:cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式。
4.cookie 和session的區(qū)別是:cookie數(shù)據(jù)保存在客戶端,session數(shù)據(jù)保存在服務(wù)器端。
簡單的說,當(dāng)你登錄一個網(wǎng)站的時候,
· 如果web服務(wù)器端使用的是session,那么所有的數(shù)據(jù)都保存在服務(wù)器上,客戶端每次請求服務(wù)器的時候會發(fā)送當(dāng)前會話的sessionid,服務(wù)器根據(jù)當(dāng)前sessionid判斷相應(yīng)的用戶數(shù)據(jù)標(biāo)志,以確定用戶是否登錄或具有某種權(quán)限。由于數(shù)據(jù)是存儲在服務(wù)器上面,所以你不能偽造,但是如果你能夠獲取某個登錄用戶的 sessionid,用特殊的瀏覽器偽造該用戶的請求也是能夠成功的。sessionid是服務(wù)器和客戶端鏈接時候隨機(jī)分配的,一般來說是不會有重復(fù),但如果有大量的并發(fā)請求,也不是沒有重復(fù)的可能性.
· 如果瀏覽器使用的是cookie,那么所有的數(shù)據(jù)都保存在瀏覽器端,比如你登錄以后,服務(wù)器設(shè)置了cookie用戶名,那么當(dāng)你再次請求服務(wù)器的時候,瀏覽器會將用戶名一塊發(fā)送給服務(wù)器,這些變量有一定的特殊標(biāo)記。服務(wù)器會解釋為cookie變量,所以只要不關(guān)閉瀏覽器,那么cookie變量一直是有效的,所以能夠保證長時間不掉線。如果你能夠截獲某個用戶的 cookie變量,然后偽造一個數(shù)據(jù)包發(fā)送過去,那么服務(wù)器還是認(rèn)為你是合法的。所以,使用 cookie被攻擊的可能性比較大。如果設(shè)置了的有效時間,那么它會將 cookie保存在客戶端的硬盤上,下次再訪問該網(wǎng)站的時候,瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然后發(fā)送給服務(wù)器。如果你在機(jī)器上面保存了某個論壇 cookie,有效期是一年,如果有人入侵你的機(jī)器,將你的 cookie拷走,然后放在他的瀏覽器的目錄下面,那么他登錄該網(wǎng)站的時候就是用你的的身份登錄的。所以 cookie是可以偽造的。當(dāng)然,偽造的時候需要主意,直接copy
cookie文件到 cookie目錄,瀏覽器是不認(rèn)的,他有一個index.dat文件,存儲了 cookie文件的建立時間,以及是否有修改,所以你必須先要有該網(wǎng)站的 cookie文件,并且要從保證時間上騙過瀏覽器
5.兩個都可以用來存私密的東西,同樣也都有有效期的說法,區(qū)別在于session是放在服務(wù)器上的,過期與否取決于服務(wù)期的設(shè)定,cookie是存在客戶端的,過去與否可以在cookie生成的時候設(shè)置進(jìn)去。
(1)cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上
(2)cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙,如果主要考慮到安全應(yīng)當(dāng)使用session
(3)session會在一定時間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會比較占用你服務(wù)器的性能,如果主要考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE
(4)單個cookie在客戶端的限制是3K,就是說一個站點(diǎn)在客戶端存放的COOKIE不能3K。
(5)所以:將登陸信息等重要信息存放為SESSION;其他信息如果需要保留,可以放在COOKIE中
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“PHP如何根據(jù)session與cookie用戶登錄狀態(tài)操作類”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!