Php会话未在所有页面上正确打开

Php会话未在所有页面上正确打开,php,session,Php,Session,所以我为我的php站点创建了这个小小的登录系统,我有一个登录表单,在这里我首先使用一些会话变量(比如UserId)创建会话。 在创建会话之前,我还会执行session_destroy(),以便销毁任何现有会话 然后我在我的站点的每个页面顶部都包含了这个php文件,它通过session\u start()打开该会话并启动mysql连接等等 问题是,在某些页面上会话确实正确打开,而在其他页面上似乎创建了一个新会话。事实上,如果我转到另一个页面,返回到正确会话未打开的页面,这是同一个错误会话,因此我实

所以我为我的php站点创建了这个小小的登录系统,我有一个登录表单,在这里我首先使用一些会话变量(比如UserId)创建会话。 在创建会话之前,我还会执行session_destroy(),以便销毁任何现有会话

然后我在我的站点的每个页面顶部都包含了这个php文件,它通过
session\u start()
打开该会话并启动mysql连接等等

问题是,在某些页面上会话确实正确打开,而在其他页面上似乎创建了一个新会话。事实上,如果我转到另一个页面,返回到正确会话未打开的页面,这是同一个错误会话,因此我实际上打开了两个会话,看起来


当我在它工作的页面和不工作的页面上回显会话ID时,它们有不同的会话ID,因此我感到困惑。

首先不要使用
session\u destroy()
,因为它会在下一个页面请求时删除会话。而是使用:

unset( $_SESSION ); //this will delete the session immediately
要尝试并测试该问题,请使用
session\u id()
函数:

<?php
    $a = session_id();
    if(empty($a)) session_start();
    echo "SID: ".SID."<br>session_id(): ".session_id()."<br>COOKIE: ".$_COOKIE["PHPSESSID"];
?>

如果您得到重复的cookie(如本例所示),请检查每个cookie的域和路径。确保cookie路径是域,并且始终设置为相同的域,并且路径始终是网站的根目录(假设您希望cookie站点是全局的)

每个cookie对设置的路径和域可见,所有路径都以路径集开始,并且可以设置为匹配域的所有子域


根据对问题的评论。

我把水晶球丢在什么地方了-你必须发布你的代码…你能检查一下你的php会话cookie吗?它们在两个实例上设置为相同的域/url吗?听起来可能是cookie域/路径问题。如果您收到重复的cookie,请检查它们的路径。确保在启动会话之前始终检查会话。如果(!isset($_SESSION))SESSION_start();不要用BOM保存你的UTF-8文件,因为它会产生问题,也许这个问题就是这个原因。用unset替换它似乎会完全破坏我的登录系统。它仍在进行两个不同的课程:/