PHP会话丢失

PHP会话丢失,php,session,login,mysqli,Php,Session,Login,Mysqli,我知道有很多问题,但他们没有提供太多信息或使用其他方法进行身份验证。让我们开始: 我有一个登录页面和主页。 我在$会话中登录保存会话 在每个页面中,我都会创建session_start(),然后检查用户是否记录了$u session 当我登录时,它会将我重定向到主页。 当我尝试login.php时,它会正确地检测im并重定向到main.php。 当我刷新main.php时,它会正确检测我的会话 然后,我想在DB中做一个更改,所以我使用jquery函数$.post将post数据发送到action.

我知道有很多问题,但他们没有提供太多信息或使用其他方法进行身份验证。让我们开始:

我有一个登录页面和主页。 我在$会话中登录保存会话 在每个页面中,我都会创建session_start(),然后检查用户是否记录了$u session

当我登录时,它会将我重定向到主页。 当我尝试login.php时,它会正确地检测im并重定向到main.php。 当我刷新main.php时,它会正确检测我的会话

然后,我想在DB中做一个更改,所以我使用jquery函数$.post将post数据发送到action.php并执行一些操作。 Action.php回显“true”,以便$.post处理程序可以检测已正确进行的更改并重定向。 Action.php回显“false”,因此$.post处理程序警报出现错误

当我对数据库进行更改时,它会完成并回显true so main.php刷新自身,显示更改,但不是刷新,而是返回LOGIN.php,丢失所有会话数据。

下面是一些代码:

启动会话

function sec_session_start() {
    $session_name = 'sec_session_id'; // Set a custom session name
    $secure = false; // Set to true if using https.
    $httponly = true; // This stops javascript being able to access the session id. 

    ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies. 
    $cookieParams = session_get_cookie_params(); // Gets current cookies params.
    //session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"],              $cookieParams["domain"], $secure, $httponly);
    session_set_cookie_params(7200, "/", $cookieParams["domain"], $secure, $httponly); 
    session_name($session_name); // Sets the session name to the one set above.
    session_start(); // Start the php session
    session_regenerate_id(true); // regenerated the session, delete the old one.     
    }
main.php、login.php和action.php的顶部

include('../db_connect.php');
include('../functions.php');

sec_session_start(); // Our custom secure way of starting a php session. 

if(!login_check($mysqli)){
    header('Location: ../');
}
function createTeam(){

    var serializedData = $('#new_team_form').serialize();

    $.post('action.php', serializedData , function (resp) {
        if(resp == "false"){
            $('#exists').html("El grupo que intentas crear ya existe o ha habido un error en la petición.");
        }else{
            window.location ="./";
        }
    });
    return false; //Needs to return false cause its the submit button of form
}
将数据发布到action.php的Javascript函数

include('../db_connect.php');
include('../functions.php');

sec_session_start(); // Our custom secure way of starting a php session. 

if(!login_check($mysqli)){
    header('Location: ../');
}
function createTeam(){

    var serializedData = $('#new_team_form').serialize();

    $.post('action.php', serializedData , function (resp) {
        if(resp == "false"){
            $('#exists').html("El grupo que intentas crear ya existe o ha habido un error en la petición.");
        }else{
            window.location ="./";
        }
    });
    return false; //Needs to return false cause its the submit button of form
}
action.php-返回的是$.post()


根据我对您的代码的理解以及您提出的问题。。。通过main.php,没有会话传输到action.php,除非所有东西都正常运行

使用此语法

//会话以以下形式检索值:

$\u会话['user\u id']=$user\u id

//并将其移动到检索会话的另一页:

$user\u id=$\u会话['user\u id']

我认为在your action.php中,会话没有以检索形式正确声明。在action.php中编写此文件


$user\u id=$\u会话['user\u id']

我不太明白你的答案,但我想你是想说:$\u SESSION['user\u id']=$user\u id必须重写为$user\u ide=$\u SESSION['user\u id']。多么愚蠢的错误,现在一切都很顺利,谢谢你。。如果我的答案不是很好地解释的形式,但它的意思与您在上面的评论中提到的相同,那就是语法错误。。所以你的问题终于要解决了…这是我的荣幸。。