【问题标题】:example.com and www.example.com are treated as different sessionsexample.com 和 www.example.com 被视为不同的会话
【发布时间】:2013-09-28 14:51:46
【问题描述】:

所以我有一个小型网站,要求用户使用用户名和密码登录。 除了 1 个小问题,一切正常

当用户使用 URL studeez.net 登录时,他或她会被重定向到顶部栏显示他的名字、姓氏和注销选项的页面。

但是如果我添加 www.在链接变为www.studeez.net 之前,为用户提供登录/注册选项。

这是一个很大的问题,因为当用户尝试登录时,他或她会收到他们已经登录的反馈。

我如何协调 studeez.net 和 www.studeez.net 以及所有后续 url,如 studeez.ney/path/to/page 和 www.studeez.ney/path/to/page

【问题讨论】:

  • 这可能是因为 cookie 仅针对非 www 域设置。
  • @anubhava 我现在没有使用任何cookies
  • 好的,看看下面的答案是否适合你。

标签: php .htaccess url


【解决方案1】:

您需要强制 wwwno-www 将用户会话保持在同一站点上。您可以使用此 htaccess 条件重写到正确的域。此示例将强制使用www

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^yoursite.com [NC]
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [R=301,NC,L]
</IfModule>

this question 可能重复。

【讨论】:

  • 谢谢,但这对后续的 url 如 studeez.net/path/to/page/ 和 www.studeez.net/path/to/page/ 是否有效
  • 他的示例所做的是将域从example.com 更改为www.example.com 并且所有/path/to/page 的东西都保持不变,所以基本上如果有人访问http://example.com/some/page 他们实际上会被重定向到http://www.example.com/some/page.
  • @JohnKariuki 是的,正如 txpeace 提到的那样。
【解决方案2】:

使用 .htaccess 文件或修改服务器配置以使用 mod_rewrite,这应该可以作为纯 PHP 解决方案工作:

$sname = session_name(); // Get the name of the session cookie.
if ( !isset($_SESSION) ) session_start(); // If a session has not been started then start one.
$sid = ( isset($_COOKIE[$sname]) ) ? session_id($_COOKIE[$sname]) : session_id();  // Get an encrypted session identifier.
setcookie($sname, $sid, time()+86400, "/", ".example.com", false, true); // Set the .example.com cookie so we can work across all sub-domains.

将 .example.com 更改为 .domain.tld 格式的任何域名,不带子域,但包括开头的句点。这应该设置一个适用于您域的所有子域的 cookie。

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2012-06-20
    • 1970-01-01
    • 2017-12-21
    • 2012-06-07
    • 2011-12-25
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多