dongyi1982 2017-11-21 17:01 采纳率: 0%
浏览 36
已采纳

PHP会话干扰子域会话

I have a few websites on the same server with the following domains with the PHP session domain set to '.example.com' so the cookie is shared between the two websites:

  • example.com
  • shop.example.com

I also have a separate server with the following domain admin.example.com and want it to use its own session/cookie. But when there is a .example.com cookie, the admin.example.com website tries using that value instead of its .admin.example.com cookie value, causing session issues...

If I were to delete the .example.com cookie, the website works as intended by using the correct .admin.earlowen.com value.

I have set session.cookie_domain to .admin.example.com to no avail. Am I missing anything? Or is just not possible.

  • 写回答

1条回答 默认 最新

  • dousuohe5882 2017-11-21 18:24
    关注

    Since they share the same domain, they are the same site and share a session.

    You can manually override this by using session_name in your admin section.

    Something like this:

    <?php
    //this forces the admin page to recognize a different cookie as it's session id
    session_name('PHPADMINSESSID');
    
    //start the session normally
    session_start();
    

    There are a few other tricky ways to do this, but you should generally avoid tricky, because you can easily forget what you did and not be able to figure it out later. I will explain some of those also for reference though:

    • Dual subdomains alter the expected hostname if they can be used, and will cause two different inherent sessions. For example subdomain.example.com and example.com will share a session, but subdomain.username.example.com and example.com will not, and will use separate sessions. You should avoid this, because if you decide to implement some backend logic to manage the session and expect them to be shared, this will become very difficult to work around.

    • You can also force different sessions using session_id, but this requires that you manually track the id's and will get quite convoluted, and will also require you to set up some sort of data store to keep track of which sessions go to what, which adds a lot of unnecessary overhead.

    Easiest way is to just use different session_name values for each session.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀