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

  1. <?php
  2. session_start();
  3. $_SESSION[’var1’]="源码爱好者";
  4. $url="<a href=".""s2.php">下一页</a>";
  5. echo $url;
  6. ?>

s2.php

  1. <?php
  2. session_start();
  3. echo "传递的session变量var1的值为:".$_SESSION[’var1’];
  4. ?>

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

s1.php

  1. <?php
  2. session_start();
  3. $_SESSION[’var1’]="源码爱好者";
  4. $sn = session_id();
  5. $url="<a href=".""s2.php?s=".$sn."">下一页</a>";
  6. echo $url;
  7. ?>

s2.php

  1. <?php
  2. session_id($_GET[’s’]);
  3. session_start();
  4. echo "传递的session变量var1的值为:".$_SESSION[’var1’];
  5. ?>

隐藏表单的方法基本原理同上。

途径3举例说明:login.html

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>Login</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. </head>
  7. <body>
  8. 请登录:
  9. <form name="login" method="post" action="mylogin1.php">
  10. 用户名:<input type="text" name="name"><br>
  11. 口 令:<input type="password" name="pass"><br>
  12. <input type="submit" value="登录">
  13. </form>
  14. </body>
  15. </html>

mylogin1.php

  1. <?php
  2. $name=$_POST[’name’];
  3. $pass=$_POST[’pass’];
  4. if(!$name || !$pass) {
  5. echo "用户名或密码为空,请<a href="login.html">重新登录</a>";
  6. die();
  7. }
  8. if (!($name=="youngong" && $pass=="123") {
  9. echo "用户名或密码不正确,请<a href="login.html">重新登录</a>";
  10. die();
  11. }
  12. //注册用户
  13. ob_start();
  14. session_start();
  15. $_SESSION[’user’]= $name;
  16. $psid=session_id();
  17. $fp=fopen("e:\tmp\phpsid.txt","w+";
  18. fwrite($fp,$psid);
  19. fclose($fp);
  20. //身份验证成功,进行相关操作
  21. echo "已登录<br>";
  22. echo "<a href="mylogin2.php">下一页</a>";
  23. ?>

mylogin2.php

  1. <?php
  2. $fp=fopen("e:\tmp\phpsid.txt","r";
  3. $sid=fread($fp,1024);
  4. fclose($fp);
  5. session_id($sid);
  6. session_start();
  7. if(isset($_SESSION[’user’]) && $_SESSION[’user’]="laogong" {
  8. echo "已登录!";
  9. }
  10. else {
  11. //成功登录进行相关操作
  12. echo "未登录,无权访问";
  13. echo "请<a href="login.html">登录</a>后浏览";
  14. die();
  15. }
  16. ?>

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

php在客户端禁用cookie时让session不失效的解决方法的更多相关文章

  1. Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法

    Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法 2014-03-27 11:44:46|  分类: Easy UI|举报|字号 订阅     可以使用$.parser.pa ...

  2. 关于Angular2与蚂蚁的NG-ZOORO一同开发时[disabled]="true"动态绑定失效的解决方法

    在使用Angular2与蚂蚁的NG-ZOORO一同开发时,当我们的表单使用的是formControlName="value"时[disabled]="true" ...

  3. 如果客户端禁用cookie,session还能使用吗?

    记得在以前找工作的时候,可多次被问到如果客户端被禁用cookie,session还能使用吗? 今天终于找到了相关的答案:我们来看一下: session是在服务器段保持会话数据的一种方法,对应的cook ...

  4. 客户端禁用cookie情况下的URL重写

    客户端禁用cookie情况下的URL重写: servlet: package com.stono.servlet.listenerorder; import java.io.IOException; ...

  5. 客户端禁用cookie

    如果客户端禁用cookie的话不影响session使用 的设置方法: <sessionState     cookieless="AutoDetect"

  6. 安装CentOS、Linux系统时,GPT分区不能引导的解决方法

    安装系统:CentOS 5.9_64bit时,分区后, 提示如下错误. 解决方法: 1.按ctrl+alt+F2 进入命令行 2.先查看分区 sh #fdisk -l    以下假设分区是/dev/s ...

  7. 百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法

    百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法 金刚 前端 ueditor 初始化 因项目中使用了百度编辑器——ueditor.整体来说性能还不错. 发现问题 我在做一个编辑页面 ...

  8. 加载驱动模块时Device or resource busy的解决方法

    加载驱动模块时Device or resource busy的解决方法 加载驱动模块时Device or resource busy的解决方法 insmod或modprobe驱动模块时Device o ...

  9. universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

    在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...

随机推荐

  1. XAMPP命令之LAMPP

    .wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertica ...

  2. 手机电话号码吉凶查询原理及ASP算法源码 转

    随着手机的快速普及,越来越多的人都在使用手机,而号码的挑选也是用户越来越关心的事情.虽然号码只是个代号而已,但几千年的传统积淀仍给号码赋予其各种含义,至于号码的吉凶也是见仁见智的一种个人喜好问题,或许 ...

  3. (转)初识suse——linux

    Linux这种系统很奇怪,差不多每种不同的版本,它所使用的安装等一些重要命令皆有所变化.假若,你要熟练掌握一种OS,那么如果安装软件/应用,那是入门的第一步.   安装命令中: RedHat.Cent ...

  4. base库--- 一个应用JS

    1 /** * Created by Administrator on 2014/6/3 0003. */ $(function () { //个人中心下拉 $('.js-hd-right').hov ...

  5. Python中super的用法

    super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复调用(钻石继承)等种种问题.总之前人留下的经验就是:保持一致性 ...

  6. Total Highway Distance

    Total Highway Distance 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi and Little Ho are playing a ...

  7. hibernate--ID生成策略--XML

    xml生成id, a) generator b) 常用4个: native, uuid, identity, sequence 1. 新建java项目,  引入hibernate, junit(use ...

  8. NSMutableDictionary

    NSDictionary *dic = @{@"name":@"yj", @"age":@"24", @"ho ...

  9. [iOS Animation]-CALayer 性能优化

    性能优化 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性.Core Animation功能和性能都非常强大,但如果 ...

  10. CI框架学习——检查用户名与密码是否合法(二)

    检查用户名与密码是否合法 步骤一.编写用户登录的窗体见下面内容 步骤二.编写数据库校验方法 $username = $_POST["username"];            # ...