【问题标题】:How to convert site from using URL-based Session Tracking to Cookied-based Session Tracking in PHP?如何在 PHP 中将网站从使用基于 URL 的会话跟踪转换为基于 Cookied 的会话跟踪?
【发布时间】:2012-01-05 01:23:27
【问题描述】:

我继承了一个使用基于 URL 的会话跟踪的网站。

这里是通过 phpinfo() 设置的会话:

下面是脚本每一页用来启动会话的代码:

ini_set('session.use_cookies', 0);
ini_set('session.name', 'ID');
ini_set('arg_separator.output', '&');
ini_set('session.gc_maxlifetime', 1440);
ini_set('session.gc_probability', 30);
session_start();

PHP 似乎会自动将&SID=[sessionid] 附加到站点上的任何内部链接。此外,在整个 PHP 脚本中,内部 URL 手动附加了.'&ID='.session_id()

我假设之前的开发人员这样做是为了让网站在没有 cookie 的手机上运行。

在 2011 年,这似乎不再是问题,因为市场上几乎所有的手机都接受 cookie。 那么如何将网站转换回通过 cookie 处理会话的默认方式(具体来说,我需要更改哪些文件以及如何更改)?

另外,是否可以让网站根据用户是否接受 cookie 以不同方式处理会话?如果是,那怎么办?

【问题讨论】:

    标签: php session cookies session-cookies


    【解决方案1】:

    看起来 php.ini 的 use_cookies 设置正确,因此您可以删除第一行以启用它,或将其更改为 1。查看session configuration options,看起来没有办法如果浏览器不接受 cookie,则自动使用基于 URL 的会话 ID。

    【讨论】:

    • 我尝试将 session.use_cookies 设置为“1”,它仍在使用基于 URL 的会话并自动将会话 ID 附加到 URL。还有其他想法吗?
    • phpinfo() 看到某些值的事实使我认为某处有一个 .htaccess 具有这些参数,或者某些其他类型的本地配置文件覆盖 php.ini。你能找到类似的东西吗?
    【解决方案2】:

    session.use_only_cookies 的 php.ini(或使用 ini_set)值更改为 on,这应该会阻止 PHP 将 SID 添加到 url

    当然,您还需要删除每个 ini_set('session.use_cookies', 0); 手动附加的 session_id()

    【讨论】:

    • 如果 session.use_only_cookies 设置为 off,是否可以同时使用这两种会话类型,并且还可以兼容不支持 cookie 的旧手机?
    猜你喜欢
    • 2016-04-10
    • 2012-01-05
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2016-05-19
    • 2017-10-14
    相关资源
    最近更新 更多