【问题标题】:PHP native session issue on expressionengine表达式引擎上的 PHP 本机会话问题
【发布时间】:2013-01-15 14:13:00
【问题描述】:

我正在为我的表达式引擎项目使用会话。我已经使用以下方法在页面顶部设置会话。

    if (session_id() == ''){
         session_start(); 
    } or

   if(!isset($_SESSION)){
        session_start();
    }

      or

   if(empty($_SESSION['userid'])){
      session_start(); 
   } 

我已经编写了自定义表达式引擎插件,我在其中进行会话检查。

一段时间后,我观察到会话的一种奇怪行为。对于不同的 url,它的设置不同。对于 http:// url 它设置不同,对于 www:// url 它设置不同。 如何设置和检索会话,以使 http://example.com 和 www.example.com 产生相同的结果。

我也按照此网址的步骤操作http://ellislab.com/forums/viewthread/231468/。我在http://ellislab.com/forums/viewthread/232604/ 上发布了同样的问题。但它对我没有帮助。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • www:// 网址?没有 www:// 协议...

标签: php codeigniter session expressionengine


【解决方案1】:

一个小提示:www 是一个子域,而不是一个协议。所以它是 www.example.com,而不是 www://example.com

话虽这么说:问题在于会话 cookie(我猜您正在使用会话 cookie)在不同的子域上无法识别,因此您需要使其在整个域上可用

您可以查看此 php 函数以获取更多详细信息:http://php.net/session_set_cookie_params

【讨论】:

    【解决方案2】:

    感谢@mishu。在您解释 www 是一个子域和 session_cookie 问题后,我做了一些实验,然后用谷歌搜索了一下。

    stackoverflow 上的这篇文章很有帮助。 PHP Sessions across sub domains

    我在表达式引擎/codeigniter 的根文件夹中打开 index.php 文件,然后添加以下行

    ini_set('session.cookie_domain','.example.com');
    

    现在它工作正常。如果有人可以在此线程上简要解释一下,它将对其他开发人员很有用。

    【讨论】:

    • stackoverflow.com/questions/4948340/… 也是一个有用的帖子。
    • 不客气。这就是为什么我提供了该特定功能的链接,而不仅仅是建议您应该使用它。也许您正在使用的系统有一个推荐的包装器,但该手册页的优势是可以作为理解这个想法的良好起点(描述和其他资源的链接);很高兴您解决了您的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2013-11-28
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多