Session会话中传递SESSIONID有两种方式:
1. 基于cookie传递(常用方式);
2. 基于URL传递;
如果用户的客户端(浏览器)禁止了cookie,那么基于cookie的传递就不能成功,跨页面就无法传递session值了, 这个时候,有以下两种方法继续进行跨页面传递session值(其实就是一种,只是两种不同的形式,都是用URL传递session_id):
-
在要跳转的的页面链接后面加上session_id();
例如:第一个页面test.php里面代码如下:
<?php
session_start();
$_SESSION['name']="SHUIPINGYANG";
$sid = session_id();
$url="<a href='session.php?sid=$sid'>下一页</a>";
echo $url;
?>
第二个页面:session.php代码,跳转的链接地址:
http://localhost/test/session.php?sid=0f9pf2i4fcap6mc4rjvebjogc3
代码:
<?php
session_id($_GET['sid']);
session_start();
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>
得到的结果是:
Array
(
[name] => SHUIPINGYANG
)
- 可以通过D:\wamp64\bin\apache\apache2.4.18\bin\php.ini中设置session.use_trans_sid=1达到跨页传递的效果,具体情况看下面的实例,这个时候还要看另外两个参数:
session.use_cookies=1 //是否基于cookie传递
session.use_only_cookies=1 //是否只是基于cookie传递
上面的session.use_only_cookies的值改成0,就可以使用url传递session_id了,而且比较有用的事如果客户端禁用cookie,地址栏就会自动填充PHPSESSID
地址会自动变成:
http://localhost/test/session.php?PHPSESSID=e9ekmat00g4ma0g28366dbei17
如果启用cookie,就会优先使用cookie传递session,地址栏就不会出现PHPSESSID(这个名字也是可以修改的)
得到的结果还是一样的:
Array
(
[name] => SHUIPINGYANG
)
是不是很不错?
记住了,session会话有两种模式!cookie相对安全一些,基于url的可能会造成不安全因素,譬如发邮件直接把地址栏整个复制过去了,发给别人,那别人就可能直接就进去你的页面了。或者收藏这个地址,历史记录等等,所以慎用此模式。
下面是配置解释:
; trans sid support is disabled by default.
; Use of trans sid may risk your users' security.
; Use this option with caution.
; - User may send URL contains active session ID
; to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
; in publicly accessible computer.
; - User may access your site with the same session ID
; always using URL stored in browser's history or bookmarks.
; http://php.net/session.use-trans-sid
session.use_trans_sid = 0
参考:
http://blog.csdn.net/zhao_liwei/article/details/53324300
版权声明:本文为zhezhebie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。