【问题标题】:How to access php sessions when cookies disabled?禁用 cookie 时如何访问 php 会话?
【发布时间】:2012-07-08 19:18:54
【问题描述】:

我为客户构建的电子商务系统出现问题,一些订单出现空白。我添加了代码来检查是否正在设置会话,并且没有在某些订单上设置它们,这就是它出现空白的原因。

我使用会话的原因是为了存储订单信息

例如:$_SESSION['data']=$_POST;

我只能假设用户在他们的浏览器中禁用了 cookie,并且想知道如何解决这个问题。

如果不通过$_GET发送会话ID,我想做的是检查cookie是否启用,但是如何使用会话ID访问$_SESSION['data']

所以我的问题是:

如何检查是否启用了 cookie,如果未通过 get 发送会话 ID,以及如何使用会话 ID 访问 $_SESSION['data']

【问题讨论】:

    标签: php session post cookies get


    【解决方案1】:

    您必须手动打开会话管理器,例如使用

    <?
    session_id($_GET['session_id']); 
    session_start();
    //you can now acccess $_SESSION['data']
    

    【讨论】:

    • 要检查 cookie 是否存在,请尝试以下 if(!isset($_COOKIE[session_name()])) session_id($_GET['session_id'); session_start();
    【解决方案2】:

    你可以在 php.ini 中设置 session.use_trans_sid,它会自动通过 GET 或 POST 附加 session id

    它通过在 php.ini 中再次根据 url_rewriter.tag 条目自动重写某些元素(例如 href)来实现这一点。

    请注意,通常最好使用 cookie,因为将会话 ID 存储在 url 中会导致用户无意中与其他人共享其会话 ID

    【讨论】:

    • 这看起来好吗? session_cache_expire(1440); session_start(); if(!isset($_SESSION['SESSION_ID'])){ ini_set('session.use_trans_sid', 1); session_id($_GET['session_id']); session_start(); };
    • 您可能还需要确保 session.use_only_cookies 已禁用。您可能希望使用session_regenerate_id() 频繁更改 SID 以限制会话劫持的可能性。仅通过 POST 传递 SID 是防止劫持的另一种方法,但这在大多数网站上是不切实际的。
    猜你喜欢
    • 2010-10-11
    • 2011-06-17
    • 2011-03-16
    • 2012-12-02
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多