禁用cookie的时候怎么使用session

  • Post author:
  • Post category:其他


Session会话中传递SESSIONID有两种方式:

1. 基于cookie传递(常用方式);

2. 基于URL传递;

如果用户的客户端(浏览器)禁止了cookie,那么基于cookie的传递就不能成功,跨页面就无法传递session值了, 这个时候,有以下两种方法继续进行跨页面传递session值(其实就是一种,只是两种不同的形式,都是用URL传递session_id):
  1. 在要跳转的的页面链接后面加上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
)
  1. 可以通过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 版权协议,转载请附上原文出处链接和本声明。