0

我建立了一个用户登录的 php 网站,并创建了一个带有用户凭据的会话。对于需要用户登录的每个页面,我都创建了一个函数来检查会话变量。现在,当我直接使用带有服务器 IP 地址的站点时,我的所有代码似乎都像魅力一样工作(例如:http: //123.45.67.891/mywebsite)。但是,一旦我通过 GoDaddy 的“域掩码”分配了一个子域,所有会话似乎根本不起作用。我试图搜索其他 Stackoverflow 帖子和任何谷歌搜索,但似乎无法解决它。该网站不会将任何页面重定向到不同的子域,就像我读过的其他帖子一样。我在这个网站上建立的所有重定向都在同一个子域掩码中。现在,我确实怀疑这种屏蔽会导致 cookie 混淆......所以我目前得到的结果是,当您提交登录表单时,php 代码运行,成功创建会话,将成功信息返回给 ajax ,ajax成功函数重定向到下一页,但是一旦到达下一页,我检查凭据的代码会立即将用户返回到索引页面,因为它没有看到任何会话。该功能按我编写的预期工作,以防止任何人在未登录的情况下访问该页面。但是使用域掩码,用户永远无法登录...是否有解决方案或者我需要摆脱子域屏蔽并为此购买一个单独的域,以便它可以像普通网站一样工作?

下面是我创建会话的片段和运行凭据检查的片段。谢谢!

//====== Create sessions at signin
... mysqli calls before this with Posts from ajax ...
session_set_cookie_params(0,'/','.mywebsite.com');
session_start();
$_SESSION["TYPE"] = $row[3];
$_SESSION["USERNAME"] = $row[0];
$_SESSION["FULLNAME"] = $row[2];
session_write_close();
... some codes returning success call to ajax where javascript then redirects to the user dashboard page...

//======= Credential Check
function checksignin(){
    session_set_cookie_params(0,'/','.mywebsite.com');
    session_start();
    if(!isset($_SESSION["USERNAME"])){
        session_destroy(); 
        header('Location: ../index.php'); 
        exit;
    else if(empty($_SESSION["USERNAME"])){
        session_destroy(); 
        header('Location: ../index.php'); 
        exit;
    }
}
4

0 回答 0