cookie固然好,不過有些客戶端瀏覽器會禁用cookie,這就會導致你所依賴cookies的程序會失效或出錯,那么若真出現用戶關閉cookies的情況,PHP應該如何再次使用session?方法還是有的。
1、設置php.ini的session.use_trans_sid = 1或者打開enable-trans-sid選項,讓PHP自動跨頁傳遞session id。
2、手動通過URL傳值、隱藏表單傳遞session id。
3、用文件、數據庫等形式保存session_id,在跨頁過程中手動調用。
途徑1舉例說明:
s1.php
<?php session_start(); $_SESSION[’var1’]="源碼愛好者"; $url="<a href=".""s2.php">下一頁</a>"; echo $url; ?>
s2.php
<?php session_start(); echo "傳遞的session變量var1的值為:".$_SESSION[’var1’]; ?>
運行以上代碼,在客戶端cookie正常的情況下,應該可以在得到結果“源碼愛好者”。
若此時關閉了客戶端的cookie,估計就得不到結果了,這時可設置php.ini中的session.use_trans_sid = 1或者編譯時打開--enable-trans-sid選項”,此時又可重新得到結果“源碼愛好者”
途徑2舉例說明:
s1.php
<?php session_start(); $_SESSION[’var1’]="源碼愛好者"; $sn = session_id(); $url="<a href=".""s2.php?s=".$sn."">下一頁</a>"; echo $url; ?>
s2.php
<?php session_id($_GET[’s’]); session_start(); echo "傳遞的session變量var1的值為:".$_SESSION[’var1’]; ?>
隱藏表單的方法基本原理同上。
途徑3舉例說明:login.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Login</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> 請登錄: <form name="login" method="post" action="mylogin1.php"> 用戶名:<input type="text" name="name"><br> 口 令:<input type="password" name="pass"><br> <input type="submit" value="登錄"> </form> </body> </html>
mylogin1.php
<?php $name=$_POST[’name’]; $pass=$_POST[’pass’]; if(!$name || !$pass) { echo "用戶名或密碼為空,請<a href="login.html">重新登錄</a>"; die(); } if (!($name=="youngong" && $pass=="123") { echo "用戶名或密碼不正確,請<a href="login.html">重新登錄</a>"; die(); } //注冊用戶 ob_start(); session_start(); $_SESSION[’user’]= $name; $psid=session_id(); $fp=fopen("e:\tmp\phpsid.txt","w+"; fwrite($fp,$psid); fclose($fp); //身份驗證成功,進行相關操作 echo "已登錄<br>"; echo "<a href="mylogin2.php">下一頁</a>"; ?>
mylogin2.php
<?php $fp=fopen("e:\tmp\phpsid.txt","r"; $sid=fread($fp,1024); fclose($fp); session_id($sid); session_start(); if(isset($_SESSION[’user’]) && $_SESSION[’user’]="laogong" { echo "已登錄!"; } else { //成功登錄進行相關操作 echo "未登錄,無權訪問"; echo "請<a href="login.html">登錄</a>后瀏覽"; die(); } ?>
請關閉cookie再測試,用戶名:youngong 密碼:123 這是通過文件保存session id的,文件是:e:\tmp\phpsid.txt。至於用數據庫的方法,就不舉例子了,與文件的操作方法類似。以上方法有一個共同點,就是在前一頁取得session id,想辦法傳遞到下一頁,在下一頁的session_start();之前加代碼session_id(傳過來的session id);希望能為您提供一些參考。