首页 > 代码库 > php在客户端禁用cookie时让session不失效的解决方法

php在客户端禁用cookie时让session不失效的解决方法

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

<?phpsession_start();$_SESSION[’var1’]="源码爱好者";$url="<a href="http://www.mamicode.com/.""s2.php">下一页</a>";echo $url;?>

s2.php

<?phpsession_start();echo "传递的session变量var1的值为:".$_SESSION[’var1’];?>

运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“源码爱好者”。
若此时关闭了客户端的cookie,估计就得不到结果了,这时可设置php.ini中的session.use_trans_sid = 1或者编译时打开--enable-trans-sid选项”,此时又可重新得到结果“源码爱好者”
途径2举例说明:

s1.php

<?phpsession_start();$_SESSION[’var1’]="源码爱好者";$sn = session_id();$url="<a href="http://www.mamicode.com/.""s2.php?s=".$sn."">下一页</a>";echo $url;?>

s2.php

<?phpsession_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="http://www.mamicode.com/登录"></form></body></html>

mylogin1.php

<?php$name=$_POST[’name’];$pass=$_POST[’pass’];if(!$name || !$pass) {echo "用户名或密码为空,请<a href="http://www.mamicode.com/login.html">重新登录</a>";die();}if (!($name=="youngong" && $pass=="123") {echo "用户名或密码不正确,请<a href="http://www.mamicode.com/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="http://www.mamicode.com/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="http://www.mamicode.com/login.html">登录</a>后浏览";die();}?>

请关闭cookie再测试,用户名:youngong 密码:123 这是通过文件保存session id的,文件是:e:\tmp\phpsid.txt。至于用数据库的方法,就不举例子了,与文件的操作方法类似。以上方法有一个共同点,就是在前一页取得session id,想办法传递到下一页,在下一页的session_start();之前加代码session_id(传过来的session id);希望能为您提供一些参考。

php在客户端禁用cookie时让session不失效的解决方法