【问题标题】:set php session on only www.website.tld and www.apps.website.tld仅在 www.website.tld 和 www.apps.website.tld 上设置 php 会话
【发布时间】:2011-04-14 05:21:04
【问题描述】:

我只想要 www.website.tld 和 www.apps.website.tld 上的会话 cookie,尽可能使用 ini_set。此外,我需要将我写入的所有 cookie 仅设置到两个子域。我不希望 www.imgs.website.tld 有 cookie。我有点不确定的 php 会话。我自己设置的 cookie 我的想法是调用 SetBothCookie($name,$value,$time) 自定义函数。

function SetBothCookie($name,$value,$time)
{
setcookie($name, $value, $time, "", "www.website.tld", 1);
setcookie($name, $value, $time, "", "www.apps.website.tld", 1);
}

所以我认为我已经关闭了 SetBothCookie 部分,但想看看其他人对该代码的看法。我坚持的部分是让 php 在两个子域上设置会话 cookie。我正在使用session_set_save_handler 覆盖默认的php 会话存储以将会话存储在数据库中,因此两台服务器都可以使用相同的会话数据。据我了解,如果我将在 www.apps.website.tld 上执行 http 请求的 Javascript 放在 www.website.tld 上,它不会允许它们发生,我希望增加安全性,所以这就是我只运行的原因子域上网站的一部分。

【问题讨论】:

    标签: php session cookies


    【解决方案1】:

    这个功能应该可以工作,但是......

    根据PHP手册在set_cookie()中使用secure参数

    表示cookie应该只 通过安全的 HTTPS 传输 来自客户端的连接。设置时 为 TRUE,只会设置 cookie 如果存在安全连接。 服务器端,由程序员负责 仅发送此类 cookie 安全连接(例如,关于 到 $_SERVER["HTTPS"])。

    所以我建议删除 set_cookie() 函数的第 6 个参数。

    此外,您可以在任何输出之前调用此函数,否则它会引发类似警告

    警告:无法修改标题 信息 - 已发送的标头 (输出开始于...)在...第 XX 行

    使用session_set_save_handler() 是控制会话变量的好方法。

    如果您想要整个域的 cookie,只需使用 "/"".website.tld"(初始点符合 RFC 2109 标准)作为 domain 参数(连续第 5 个)。参数path 应该是""(空字符串;第 4 个)。

    【讨论】:

    • 我将网站包装在 ob_start();和 ob_end_flush();它为我修复了标题错误。
    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多