萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php中session和cookie實現自動登錄

php中session和cookie實現自動登錄

   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");  
}  
}  
}


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

copyright © 萬盛學電腦網 all rights reserved