【问题标题】:My web host is adding ?PHPSESSID=fgh2h45... to the end of the URL我的网络主机添加 ?PHPSESSID=fgh2h45... 到 URL 的末尾
【发布时间】:2011-03-12 14:21:46
【问题描述】:

我正在使用 iPage.com 主机。为了在他们的主机中使用 PHP 会话,我需要在每个页面的开头添加session_save_path('/home/users/web/.../cgi-bin/tmp');(在我的例子中只有 index.php,因为一切都首先通过 index.php)。

现在,他们会自动将会话 ID 添加到每个请求的 URL 的末尾,如下所示:website.com/movies/details/?PHPSESSID=4s54kjhdl...

我认为这会导致问题,并可能影响谷歌索引和搜索引擎优化..

如何预防?

【问题讨论】:

    标签: php apache session hosting


    【解决方案1】:

    您的“主机”没有引起问题,PHP 正在附加此数据。具体来说,PHP 配置为将 PHPSESSID 变量附加到 URL 以允许 PHP 跟踪会话。可以在调用 session_start 之前使用 ini_set 更改相关设置,或者通过更新 php.ini 文件更永久地更改相关设置(尽管由于您是托管的,因此最后一个选项可能已失效)。 This is a list of the available runtime settings for sessions in PHP.

    虽然您可以控制是否将值附加到 URL 的末尾,但需要跟踪会话。或者,您可以将 PHP 配置为使用 cookie 来跟踪会话,但要求 cookie 来跟踪会话可能会为拒绝 cookie 的用户破坏您的应用程序。

    简而言之,您可以控制会话 ID 以使其更漂亮(通过将 PHPSESSID 重命名为更易于使用的名称或使值不那么神秘),但除非您想使用 cookie 来维护会话,否则您会被困在您的网址上的这个“垃圾”。如果您使用 cookie,则某些用户可能无法维持会话。

    要启用基于 cookie 的会话处理,您可以执行以下任一操作:

    // stop PHP from automatically embedding PHPSESSID on local URLs
    ini_set('session.use_trans_sid', false);
    

    // only use cookies (no url based sessions)
    ini_set('session.use_only_cookies', true);
    

    【讨论】:

    • 允许 cookie 以外的任何内容都会使用户暴露于会话固定。
    • 在“Mike Sherov”的回答中,他用假而不是真,这是正确的吗? @Artefacto:你能解释一下会话固定问题吗?所以只使用cookies而不是会话??
    • @Jonathan,看来我误读了手册,快速搜索似乎表明该选项是自动在您的 URL 中嵌入 PHPSESSID 内容的选项,它应该是错误的(现在编辑)。跨度>
    • @Jon 您可以使用 URL 来传达会话信息,但如果您允许,您必须格外小心会话处理。请参阅 Mark 链接到的 Wikipedia 文章。但请注意,其中列出的一些“对策”只是缓解措施。
    【解决方案2】:

    如果不能自己修改php.ini,可以这样做:

    ini_set('session.use_trans_sid',false);
    

    这将导致 PHP 使用基于 cookie 的会话处理,而不是将会话 ID 附加到 URL(无论如何这可能是一个安全风险)。

    【讨论】:

      【解决方案3】:

      将其配置为使用基于 cookie 的会话或完全关闭会话。

      【讨论】:

        猜你喜欢
        • 2011-01-05
        • 2013-08-07
        • 2017-06-15
        • 2021-10-21
        • 1970-01-01
        • 1970-01-01
        • 2011-08-21
        • 2021-11-17
        • 2012-08-03
        相关资源
        最近更新 更多