閱讀448 返回首頁    go 技術社區[雲棲]


php在客戶端禁用cookie時讓session不失效的解決方法

本文轉自IT擺渡網歡迎轉載,請標明出處
擺渡網

更多php文章請閱讀

php問題解決

  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);希望能為您提供一些參考。

最後更新:2017-08-21 16:33:20

  上一篇:go  黑客可通過漏洞遠程關閉汽車的安全功能
  下一篇:go  php錯誤提醒FastCGI Error Error Number: -2147467259 (0x80004005)錯誤原因及解決方法