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

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. Apache添加mime类型

    今天同事给我提了一个bug,说IE浏览器无法下载网站上的固件版本文件(xxxx.img),点击下载后显示一堆二进制乱码,因为我们公司的固件版本文件是以.img结尾的,所以对应的content-type ...

  2. C#入门经典第十章类的成员-1

    类成员的访问级别 public   成员可以由任何代码访问,公共的. private 私有的,成员只能有类中的代码访问.(默认的关键字) internal 内部的,成员只能有定义它的程序集(项目)内部 ...

  3. public private proteccted区别

    public公共,加上这个修饰的类或属性,可以在同一个包或者别的包里面访问 private私有的,加上这个修饰的类或属性,只能在同类里访问,同包和别的包不能访问 protected保护,加上这个修饰的 ...

  4. tabBarItem动画

    1.有时,我们需要为tabBarItem设置一些动画.在网上查了半天,没有结果.自己写了一个简单的动画 代码如下: - (void)tabBarController:(UITabBarControll ...

  5. QWidget QMainWindow QDialog 三个基类的区别

    Qt类是一个提供所需的像全局变量一样的大量不同的标识符的命名空间.通常情况下,你可以忽略这个类.QObject和一些其它类继承了它,所以在这个Qt命名空间中定义的所有标识符通常情况下都可以无限制的使用 ...

  6. codeforces 665C Simple Strings

    相同的一段字母变一下就可以. #include<cstdio> #include<cstring> #include<cmath> #include<vect ...

  7. pscs6

    http://wenku.baidu.com/link?url=cO03xdo_GQDdFdeYTDD36ZrjeHarUu4IN-fSEoFAnDXmd5W0yKvzkNWY_vOKKIaKbCdB ...

  8. 前端复制功能的若干 -- document.execCommand()

    最近涨停科技公司实习,由于backend基础太弱...强行前端了一把..搞了两周才搞下页面里copy的功能,期间有些琐碎,恐忘,记录在此. 目前copy主流有四种方式:ZeroClipboard,Cl ...

  9. Altera Soc交叉编译环境搭建

    该文主要是对rocketboard教程的补充,详细教程参见https://rocketboards.org/foswiki/view/Documentation/EmbeddedLinuxBeginn ...

  10. 转 Android HttpClient post MultipartEntity - Android 上传文件

    转自  http://blog.csdn.net/hellohaifei/article/details/9707089 在Android 中使用HttpClient,MultipartEntity ...