PHP根據session與cookie使用者登入狀態操作類的代碼_php執行個體

來源:互聯網
上載者:User

 1、使用者登入狀態操作類UserLogin

<?phpfinal 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、在使用者輸入使用者名稱、密碼處調用來做相關判定

<?phprequire_once 'Init.php';// if logged in, logoutif (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中

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.