0

这是我想知道的一个场景。假设我有以下内容:

  1. 运行以下网站的 php/apache 网络服务器:

    /var/www/version1ofmyapp/

    /var/www/version2ofmyapp/

  2. cookie 在用户的机器上启用。

  3. Web 应用程序在登录/注销时将数据写入会话

登录到 version1ofmysite(从而创建一个名为 PHPSESSID 的 cookie)是否可以让我访问 version2ofmysite?例如,我登录到站点的版本 1,然后将 URL 更改为版本 2,它只是让我进入,就好像我已经通过身份验证一样。我想更好地理解为什么会这样。

谢谢。

编辑1:

同域

4

3 回答 3

1

cookie 是为域定义的,并且可以为路径定义。因此,您可以限制 cookie 的发送。

如果您有一个在两个应用程序中使用的 sessionID 并使用相同的会话存储,您可以访问保存在会话中的信息。

因此,您登录的信息将用于两个应用程序。您可以更改会话的名称 (http://php.net/manual/en/function.session-name.php) 以防止这种情况发生,或者更改会话存储 (http://php.net/manual/ en/function.session-save-path.php)

于 2013-01-18T19:49:36.790 回答
1

在您的 php.ini 文件中,您可以配置服务器以允许这样做:

session.cookie_domain = ".mydomain.com"

这将允许子域访问 cookie。

于 2013-01-18T19:50:55.380 回答
1

cookie PHPSESSID 仅限于创建它的域,并且只会发送到该域或子域。如果您在同一台服务器上有多个域,则每个域都有不同的 PHPSESSID cookie。

如果您使用子域并希望在它们之间共享会话,则可以在调用 session_start() 之前使用 session_set_cookie_params($lifetime_in_seconds, '/', '.mydomain.com') 以便在所有子域之间共享相同的会话。

cookie 的范围是按主机名(误导性地称为域),然后是名称。只有当它们用于不同的域(主机)时,您才能拥有两个名为 PHPSESSID 的 cookie。单个域不能有两个名称相同的 cookie。如果您尝试这样做,则将其视为对已设置的更改。

于 2013-01-18T19:53:17.123 回答