程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中session和cookie實現自動登錄

php中session和cookie實現自動登錄

編輯:關於PHP編程

       session的使用:

      session_start();定義$_SESSION數組變量。

      session_start()使用前,不能有任何形式的輸出,包括php中的輸出和html代碼。

      $_SESSION數組不可以使用數值下標,只可以使用字符串下標。

      php.ini中的session_save_path配置項決定了session的保存位置。

      默認情況下,session是保存在文件中。我們可以使用session_set_save_handler()函數來重寫session機制。

      設置有效時間

     代碼如下   SESSION:
    ini_set('session.gc_maxlifetime',24*3600);//session保存一天
    session_start();
    $_SESSION[‘web_name’]='網易';

      說明:好像默認是時間是:20-24分鐘,但是關閉浏覽器session就自動消失了!

      刪除session:

      刪除某個元素 unset($_SESSION[key]);

      刪除所有session $_SESSION=array();

      刪除保存session數據的文件 session_destroy();

      session_distroy()方法只是刪除了服務器端的session文件,並不會釋放內存中的$_SESSION變量,如果我們在session_distroy()後,立即var_dump($_SESSION),仍然可以看到session輸出。因此如果想完全的釋放session,必須配合使用$_SESSION=array()。

      cookie的使用:

      設置cookie:setcookie(變量名,變量值,生存時間(時間戳))。

      刪除cookie:setcookie(變量名,值,time()-1)。原理:設置cookie的生存時間過期。

      讀取cookie:$_COOKIE[變量名]。

      $path="/"; //設置cookie存放的路徑;1.默認存放是本目錄,只有本目錄下才能訪問,2.“/”表示存放在根目錄,3.“/foo/”只有foo文件夾下面文件才能訪問

     代碼如下  


    setcookie("cookiename","網易'", time()+intval(24*3600),$path); /* 有效期 1天 */

      注意:cookie存放的值只能是string類型的,但是要存放數值怎麼解決呢!

      存儲:

     代碼如下  

    $array=array('a','b');
    //"serialize:"返回值是一個字符串。有的時候為了把一些數據轉為字符串存起來,但是希望保持數據原來有結構和內容。就要用到這個函數。
    $res=serialize($array);
    setcookie("snsresult",$res,time()+intval(24*3600));

      讀取:

     代碼如下  

    //恢復serialize對象

     $other = StripSlashes($_COOKIE['snsresult']);//必須執行這步
      $arr=unserialize($other);//先將加密cookie進行解碼 www.111Cn.net

      注意:setcookie在代碼中存取值時前面是不可以輸出任何內容的,空行也不可以,不然cookie是沒有值的。

      1、$_COOKIE只可以讀取cookie的值,並不能對cookie進行設置。

      2、在使用setcookie之前,不能有任何類型的輸出。

      3、在腳本第一次設置cookie後,是不能在當前腳本使用$_COOKIE獲取到的。需刷新頁面或者在其他腳本中獲取。

      自動登錄

     代碼如下  

    //檢查用戶是否登錄


    function checklogin(){  
         if(empty($_SESSION['user_info'])){    //檢查一下session是不是為空  
         if(empty($_COOKIE['username']) || empty($_COOKIE['password'])){  //如果session為空,並且用戶沒有選擇記錄登錄狀  
         header("location:login.php?req_url=".$_SERVER['REQUEST_URI']);  //轉到登錄頁面,記錄請求的url,登錄後跳轉過去,用戶體驗好。  
    }else{   //用戶選擇了記住登錄狀態  
         $user = getUserInfo($_COOKIE['username'],$_COOKIE['password']);   //去取用戶的個人資料  
         if(empty($user)){    //用戶名密碼不對沒到取到信息,www.111Cn.net 轉到登錄頁面  
         header("location:login.php?req_url=".$_SERVER['REQUEST_URI']);  
         }else{  
         $_SESSION['user_info'] = $user;   //用戶名和密碼對了,把用戶的個人資料放到session裡面  
         }  
         }  
         }  
    }


    二,用戶提交登錄信息


    username = trim($_POST['username']);  
    $password = md5(trim($_POST['password']));  
    $validatecode = $_POST['validateCode'];  
    $ref_url = $_GET['req_url'];  
    $remember = $_POST['remember'];  
      
    $err_msg = '';  
    if($validatecode!=$_SESSION['checksum']){  
    $err_msg = "驗證碼不正確";  
    }elseif($username=='' || $password==''){  
    $err_msg = "用戶名和密碼都不能為空";  
    }else{  
    $row = getUserInfo($username,$password);  
      
    if(empty($row)){  
    $err_msg = "用戶名和密碼都不正確";  
    }else{  
    $_SESSION['user_info'] = $row;  
    if(!empty($remember)){     //如果用戶選擇了,記錄登錄狀態就把用戶名和加了密的密碼放到cookie裡面  
    setcookie("username", $username, time()+3600*24*365);  
    setcookie("password", $password, time()+3600*24*365);  
    }  
    if(strpos($ref_url,"login.php") === false){  
    header("location:".$ref_url);  
    }else{  
    header("location:main_user.php");  
    }  
    }  
    }


    三,當用戶點退出時,清出記錄登錄狀態


    //退出登錄


    function logout(){  
    unset($_SESSION['user_info']);  
    if(!empty($_COOKIE['username']) || !empty($_COOKIE['password'])){  
    setcookie("username", null, time()-3600*24*365);  
    setcookie("password", null, time()-3600*24*365);  
    }  
    }

      兩者的聯系與區別:

      聯系:

      兩者都被成為會話技術,用於解決http的無狀態性。

      sessionID是保存在cookie中的。默認情況下,session是依賴cookie的,如果浏覽器端完全禁用了cookie,那麼session也就不能用了。但是我們有其他的方法可以讓session繼續有用。比如url重寫,將sessionID放在url中;給表單增加隱藏域,講sessionID存放在隱藏域中,發送至浏覽器。

      區別:

      cookie保存早浏覽器端,每次訪問服務器的時候,都會講cookie帶過去,保證讓服務器知道兩次請求來自於同一個客戶端。安全性較低。

      session保存在服務器,每次請求都會通過cookie帶來的sessionID去服務器匹配。安全性較高。

      session的有效期從session_start()開始,到浏覽器關閉結束。

      cookie可以設定有效期。默認為浏覽器關閉cookie就失效,sessionID丟失,即使服務器端的session文件還在,也不會被找到。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved