【问题标题】:MySIte immediately getting logged out for 2nd requestMySite 立即退出第二个请求
【发布时间】:2015-11-27 12:38:06
【问题描述】:

我是 php 新手。我面临会话问题。我的意思是,在我登录并单击网站中的任何链接后,它会立即退出。不知道为什么。

在 chrome 控制台中:我输入为:document.cookie,它向我显示“”,然后我明白 cookie 以某种方式立即被删除或其他问题。

以下 2 个网站存在此问题。

我们有这样的网站:

www.mysite.site1.com/folder1
www.mysite.site2.com/folder2

下面是我的 MySite.com/folder1 代码

   function MySession() {
      $params = session_get_cookie_params();
      session_set_cookie_params($params['lifetime'], '/v/folder1');
      session_start();
   }

   function clear()
   {
      $_SESSION=array();
      session_destroy();
   }

下面是我的 MySite.com/folder2 代码

 function MySession() {
      $params = session_get_cookie_params();
      session_set_cookie_params($params['lifetime'], '/v/folder2');
      session_start();
   }

   function clear()
   {
      $_SESSION=array();
      session_destroy();
   }

【问题讨论】:

  • Read the manual ... 通过设置会话 cookie 的路径,您可以限制传输到的 url。
  • @Orangepill 路径值如何影响 mysite?很抱歉我没有,你能告诉我我的代码需要改变什么吗?
  • 使用 session_set_cookie_params($params['lifetime'], '/');如果你想对文件夹 1 和文件夹 2 使用不同的会话,你可以创建虚拟主机并设置它。
  • @PrashantSrivastav 如果我使用 as 有什么问题: session_set_cookie_params($params['lifetime'], '/v/folder2'); ??
  • 对于 chrome 转到您的浏览器检查 cookie 中的元素资源 cookie,您会得到一个路径列和域,这对于维护会话非常重要。为 cookie 提供路径,您正在设置 cookie 的限制,该限制只能访问该文件夹。

标签: php session cookies session-variables session-cookies


【解决方案1】:

在 session_set_cookie_params() 中为 cookie 设置域只会影响用于会话 cookie 的域。

因此,要使您的所有 cookie 在您网站的所有子域中可用,您需要在根域上设置 cookie。

在设置 cookie 的有效路径时,请始终记住结尾有 '/'。

正确:

session_set_cookie_params (0, '/yourpath/');

不正确:

session_set_cookie_params (0, '/yourpath');

【讨论】:

  • 我刚刚在上面编辑了我的域名,之前输入错误。这是一个:www.mysite.site1.com/folder1 现在请告诉我我真正需要改变什么......?我什至按照你说的尝试了“预告片”斜线,但仍然无法正常工作......
【解决方案2】:

mysite.site1.com 是您的基本网址。

当您从 www.mysite.site1.com/folder1 切换时 到 www.mysite.site2.com/folder2

你肯定会被注销。

【讨论】:

  • 很抱歉这样问,我在哪里设置这个基本网址?如何?如果我尝试使用 session_name('FOLDER1'); 怎么样?对于 www.mysite.site1.com/folder1 和其他文件夹的类似方式..
  • 使用 codeigniter 将为您处理所有这些事情。会话网址安全加密等,因为你没有使用让我告诉你简单的解决方案
  • <?php define('BASE_URL', 'http://www.mysite.site1.com/'); 并在项目中像这样使用它。 BASE_URL."folder1" 将打印 www.mysite.site1.com/folder1
  • 仅仅为了 1 个问题,我认为不建议使用某些框架,尤其是对于已经存在的正在运行的项目。
【解决方案3】:

嗯,我能够找到我的查询的答案:

因为在我的情况下,我有 2 个文件夹,即 www.mysite.com/folder1 && www.mysite.com/folder2 ,那么我们必须保留 session_name('folder1') for 'folder1'session_name('folder2') for 'folder2' ,否则两个文件夹共享相同的会话 ID因此用户在文件夹 2 中自动登录(假设他已经登录文件夹 1)

 function Session() {
      session_name('FOLDER_SID');
      session_start();
   }

关于 session_name 的更多信息,这里:http://stackoverflow.com/a/7551430/4956785

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2017-04-12
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多