Session变量不能转移到下页.解决: session.use_trans_sid = 1
附:文摘
============================================================
在PHP使用SESSION的朋友可能会碰到这么一个问题。SESSION变量不能跨页传递。这令我苦恼了好些日子,终于通过查资料思考并攻克了这个问题。我觉得。出现这个问题的解决办法有下面几点:
1、client禁用了cookie
2、浏览器出现故障,临时无法存取cookie
3、php.ini中的session.use_trans_sid = 0或者编译时没有打开--enable-trans-sid选项
为什么会这样呢?以下我解释一下:
Session储存于server端(默认以文件方式存储session),依据client提供的session id来得到用户的文件,取得变量的值,session id能够使用client的Cookie或者Http1.1协议的Query_String(就是訪问的URL的“?
”后面的部分)来传送给server,然后server读取Session的文件夹……。
也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();执行的时候,就在server上产生了一个session文件。随之也产生了与之唯一相应的一个session
id,定义session变量以一定形式存储在刚才产生的session文件里。通过session id,能够取出定义的变量。跨页后,为了使用session,你必须又运行session_start();将又会产生一个session文件。与之相应产生相应的session id。用这个session id是取不出前面提到的第一个session文件里的变量的,由于这个session id不是打开它的“钥匙”。假设在session_start();之前加代码session_id($session id);将不产生新的session文件。直接读取与这个id相应的session文件。
PHP中的session在默认情况下是使用client的Cookie来保存session id的,所以当client的cookie出现故障的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是session相比cookie的高明之处。当client的Cookie被禁用或出现故障时,PHP会自己主动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这样的附着也是有一定条件的。即“php.ini中的session.use_trans_sid
= 1或者编译时打开打开了--enable-trans-sid选项”。
用过论坛的朋友都知道,在进入论坛的时候,往往会提示你检查Cookie是否打开,这是由于大多数论坛都是基于Cookie的,论坛用它来保存username、password等用户信息,方便使用。并且非常多朋友都觉得Cookie不安全(事实上不是这样),往往禁用它。事实上在PHP程序中,我们全然能够用SESSION来取代Cookie,它能够不依赖于client是否开启Cookie。
所以。我们能够抛开cookie使用session,即假定用户关闭cookie的情况下使用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’];
?>
执行以上代码,在clientcookie正常的情况下。应该能够在得到结果“中华人民共和国”。
如今你手动关闭client的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">
username:<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 "username或password为空。请<a href="login.html">又一次登录</a>";
die();
}
if (!($name=="youngong" && $pass=="123") {
echo "username或password不对,请<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測试。username:youngong password:123 这是通过文件保存session id的,文件是:e: mpphpsid.txt,请依据自己的系统决定文件名称或路径。
至于用数据库的方法。我就不举样例了,与文件的方法类似。
总结一下,上面的方法有一个共同点,就是在前一页取得session id。然后想办法传递到下一页。在下一页的session_start();代码之前加代码session_id(传过来的session id);
====================================================================
还有,我的php.ini文件存放在两个地方 1.c:/php4/php.ini 2.c:/winnt/php.ini ,,而我的程序好像仅仅认识 c:/php4/php.ini,对于 winnt 下的php.ini 修改不起作用.!!!
在不清楚哪一个php.ini起作用的时候最好同一时候修改两个文项目,尽管麻烦,但解决这一问题.
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Session变量不能转移到下页.解决: session.use_trans_sid = 1的更多相关文章
- Session变量不能传送到下一页.解决: session.use_trans_sid = 1
转自:http://blog.csdn.net/drylandfish/article/details/244085 附:文摘===================================== ...
- PHP Session 变量
PHP Session PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中的 ...
- Laravel 解决在ajax 请求下不能保存session的问题
Laravel 解决在ajax 请求下不能保存session的问题 \Session::put('isLogin',true); // 你要保存的session key \Session::put(' ...
- ASP.NET MVC下实现前端视图页的Session
在ASP.NET MVC的控制器中可以实现Session处理.如果要在前端视图页实现Session该如何做呢?可以使用window.sessionStorage来做. AlexChittock用jQu ...
- Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
- 【转】 Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
- PHP超级全局变量——Session 变量
PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置.Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用. PHP Session 变量 当您运行一个 ...
- 使用 StateServer 保存 Session 解决 Session过期,登陆过期问题。
使用 StateServer 保存 Session 正常操作情况下Session会无故丢失.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这 ...
- 【架构师之路】集群/分布式环境下5种session处理策略
[架构师之路]集群/分布式环境下5种session处理策略 转自:http://www.cnblogs.com/jhli/p/6557929.html 在搭建完集群环境后,不得不考虑的一个问题就是 ...
随机推荐
- opengl编程指南
第一章 opengl简单介绍 1.1 什么是opengl opengl是图形硬件的一种软件接口. 1>渲染(rendering)是计算机依据模型创建图像的过程. 2>模型(m ...
- IQ调制、整形滤波器与星座映射
http://www.cnblogs.com/touchblue/archive/2013/01/15/2861952.html 现代通信中.IQ调制基本上属于是标准配置,由于利用IQ调制能够做出全部 ...
- 使用JS意识到自己主动提交表单
今天将需要chat集成到客户的网站上去,注册用户链接登录这个网站后点击实现网站直接登录chat向上.我不停chat原来的登录界面,采纳JS当页面跳转技术,随着时间的推移自己主动填写表格.自己主动提交表 ...
- PHP设计模式——备忘录模式
声明:本系列博客參考资料<大话设计模式>,作者程杰. 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下.捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对 ...
- Qt Mac 在软件 icns图标制作
1.首先,下载一个电话Icon Composer软件 之前Xcode像这个东西,现在,我不知道有或无,迷茫,一世Xcode很少. Icon Composer是苹果出的. 下载地址: http://ww ...
- 前端插件@user
分享一个 @user 前端插件 开源地址:https://github.com/yuezhongxin/Mention.js 插件效果:类似于微博或 github 中 @user 列表效果. 这是 ...
- Java中间MD5加密算法完整版
携带Java软件开发过程.,因此Java中提供了自带的MessageDigest实现对文本的加密算法,以下是一个对文本进行加密的MD5加密工具类代码演示样例: package net.yuerwan. ...
- XML DTD详解(转)
前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二篇介绍DTD,引入有效的XML的概念(符合语 ...
- 你可以不知道原因,但是,我们不能停止努力。httplook抓取路由配置界面信息
因为实验室的项目要求,需要动态控制路由的配置信息,我们知道.路由选择需要购买的访问后,:http://192.168.1.1 路由配置页面.配置,不须要人手工操作.甚至定时任务配置的时候,就须要进一步 ...
- android该系统的应用API选择演示版本
转载请注明出处[http://blog.csdn.net/y150481863/article/details/41280045] 首先我们在开发一个应用之前,特别是一个android应用.首先要考虑 ...