【问题标题】:Cookies value isn't set when running from different domain从不同域运行时未设置 Cookie 值
【发布时间】:2015-09-03 14:02:12
【问题描述】:

我目前正在制作一个网页游戏,它连接到服务器上的 php 文件以获取某些值(这是为了向最终用户隐藏一些代码)。服务器将创建 Session 并在其中存储值。这也意味着它将 Session Id 存储在 cookie 中。

问题是,如果我在与 php 文件不同的域上运行,则未设置 cookie 中的值。例如:

这将起作用:

Javascript address: "http://www.example.com/js/main.js"
PHP address: "http://www.example.com/php/main.php"

这将起作用:

Javascript address: "http://example.com/js/main.js"
PHP address: "http://example.com/php/main.php"

这不起作用:

Javascript address: "http://example.com/js/main.js"
PHP address: "http://www.example.com/php/main.php"

这不起作用:

Javascript address: "http://www.example.com/js/main.js"
PHP address: "http://example.com/php/main.php"

我已经启用了CORS,并且PHP文件可以成功返回值,只是如果域不同,则没有设置会话ID(实际上没有'www'被视为不同的域......)。现在我正在考虑强制用户使用 JavaScript 访问预期的 url。虽然这可行,但我觉得这更像是一种 hack,而不是一个正确的解决方案,并且正在寻找一个更清洁/正确的解决方案。

【问题讨论】:

    标签: javascript php cookies session-cookies


    【解决方案1】:

    例如,您需要在Set-Cookie 标头中指定域

    Set-Cookie: name=value; domain=example.com
    

    显然这仅适用于同一域的子域,您不能在完全不同的域之间共享 cookie。更多示例here

    【讨论】:

    • 我确实尝试在 php 文件中使用 setcookie()。类似 "setcookie("PHPSESSID", session_id(), 60*60*24,'/', "example.com", false, false)",但遗憾的是没有任何改变。
    • 您是否尝试添加前导 '.'到域?请参阅文档中有关 setcookie 的注释:php.net/manual/en/function.setcookie.php
    • 和“.example.com”一样?是的,也试过了,不幸的是没有改变任何东西..
    猜你喜欢
    • 2012-04-21
    • 2012-02-11
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多