【问题标题】:Session not maintained between mysite.com and www.example.commysite.com 和 www.example.com 之间未维护会话
【发布时间】:2010-10-20 05:47:37
【问题描述】:

我正在使用会话来维护我网站上不同页面之间的一些变量。虽然当我从 www.example.com/a 移动到 www.example.com/b 时它工作正常,但如果我从 example.com/a 移动到 www.example.com/b,会​​话变量会丢失

知道如何确保会话保持不变,而不管 www 或没有 www 吗?

该网站在导航到不同的页面时会附加一个 www,但如果没有它,这些页面也可以访问。因此,如果有人手动输入地址并省略该部分,然后导航到页面 b(通过单击链接或提交表单),会话变量将丢失。

【问题讨论】:

    标签: php session-variables


    【解决方案1】:

    合理的做法是将example.com重定向到www.example.com;这样你就可以确保你的所有访问者都在www.example.com,并且爬虫不会索引两个具有相同内容的页面。

    您可以通过向访问example.com 的用户发送301: Moved Permanently 来做到这一点(假设您使用apache,您必须将其添加到您的.htaccess):

    Redirect 301 http://example.com/ http://www.example.com/
    

    第二版:

    Redirect 301 http://example.com/(.*) http://www.example.com/$1
    

    对不起,这个是对的:

    Options +FollowSymlinks
    RewriteEngine on
    
    rewritecond %{http_host} ^example.com [nc]
    rewriterule ^(.*)$ http://www.example.com/$1 [r=301,nc]
    

    取自这里http://www.webconfs.com/how-to-redirect-a-webpage.php

    【讨论】:

    • +1 - 这是更简洁的方法,假设 www.mysite.com 在逻辑上与 mysite.com 相同
    • 谢谢。我会和这个一起去的。只有一个问题 - 如果我传递带有 URL 的参数(没有 www),重定向是否会自动将参数传递给 www URL?
    • 不确定,但第二个版本应该。
    【解决方案2】:

    您需要确保使用 session_set_cookie_params 将 cookie 设置为 .example.com 而不是 www.example.com,特别是参数 3 - documentation 中的域

    【讨论】:

    • 如果他希望会话值在两个域下都可用,将域设置为“.example.com”会更有意义。
    【解决方案3】:

    会话 ID 存储在 cookie 中。 Cookie 不会从子域转移到子域(例如 www.somesite.com 到 somesite.com)。您可以使用session_set_cookie_params()php.ini 更改cookie 参数

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 1970-01-01
      • 2017-08-18
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 2011-05-20
      • 2014-11-09
      相关资源
      最近更新 更多