您的位置:首页 > 其它

客户端禁用cookie时,实现Session值跨页面传递

2017-02-16 12:43 232 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cookie session url 浏览器