重新加载页面后未保存会话数据

时间:2014-05-27 12:48:37

标签: php jquery ajax session

我正在尝试从索引页面创建一个登录面板。登录数据将通过ajax调用发送。如果用户名和密码正确,那么我在会话中设置userdata并在ajax成功时重新加载索引页面。我在所有页面中都包含了配置文件,其中我编写了session_start()方法,因此session_start()可以在所有页面中使用。我还检查了phpinfo,启用了会话支持。我还检查了ajax php页面中的值是在会话中设置但重新加载后索引页面会话数组为空。

请帮助我并指导我如何解决这个问题。

这是我的config.php文件

<?php
session_start();
$mysql_host = "****";
$mysql_user = "****";
$mysql_password = "****";
$mysql_db = "****";
$link = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die('');
mysql_select_db("$mysql_db")or die("cannot select DB");
include 'includes/user_model.php';
$fgmembersite = new FGMembersite();
$fgmembersite->InitDB($mysql_host,$mysql_user,$mysql_password,$mysql_db);
?>

user_model.php是处理数据库检查和会话集。

function Login()
{
    if(empty($_POST['Email']))
    {
        $this->HandleError("UserName is empty!");
        return false;
    }

    if(empty($_POST['password']))
    {
        $this->HandleError("Password is empty!");
        return false;
    }

    $username = trim($_POST['Email']);
    $password = trim($_POST['password']);

  //  if(!isset($_SESSION)){ session_start(); }
    if(!$this->CheckLoginInDB($username,$password))
    {
        return false;
    }

    $_SESSION[$this->GetLoginSessionVar()] = $username;

    return true;
}

function CheckLoginInDB($username,$password)
 {
    $this->tablename='users';
    if(!$this->DBLogin())
    {
        $this->HandleError("Database login failed!");
        return false;
    }          
    $username = $this->SanitizeForSQL($username);
    $pwdmd5 = md5($password);
    $qry = "Select * from $this->tablename where username='$username' OR email = '$username' and password='$pwdmd5' and active_status=1";

    $result = mysql_query($qry,$this->connection);

    if(!$result || mysql_num_rows($result) <= 0)
    {
        $this->HandleError("Error logging in. The username or password does not match");
        return false;
    }

    $row = mysql_fetch_assoc($result);


    $_SESSION['name_of_user']  = $row['first_name'].' '.$row['last_name'];
    $_SESSION['email_of_user'] = $row['email'];
    $_SESSION['user_id'] = $row['user_id'];
    $_SESSION['type_id'] = $row['type_id'];

    return true;
  }

ajax.php

   <?php
   include 'includes/config.php';
   if(isset($_POST['Email'])) {
    if($fgmembersite->Login()) {
      echo 1;
    }
  else {
   echo $fgmembersite->error_message;    
   }
  }

在Index.php中,我通过jQuery提交登录表单:

   <script> $(document).ready(function()
   {
$("button#login").click(function()

    {$("#ErrorMessages").hide(); 

     $("#ErrorMessages").html("");            

     var username = $("#username").val();            

     var pwd = $("#password").val();            

     if(username =='' || pwd == '')                

     $("#ErrorMessages").show();                

     $("#ErrorMessages").html("Inavalid Username or Password");                  

     $.ajax({  type: "POST",

               url: "loginChk.php",         

               data: $('form.login').serialize(),               

               success: function(msg)

               { if(msg == 1){

                 // $(location).attr('href','index.php');                            
                location.reload();
               }                            

               else

               {   

                $("#ErrorMessages").show();                     

                $("#ErrorMessages").html(msg);                              

                }},         

                error: function(){                            

                $("#ErrorMessages").html(msg);              

                return false;}                  

                });                        

                return false; });});

                </script>       

1 个答案:

答案 0 :(得分:0)

我已经弄清楚了问题,它是服务器上的session_save_path问题。在我的配置文件中在会话开始之前指定了路径之后。

session_save_path("/home/users/web/***/cgi-bin/tmp"); // path of the directory used to save session data. 
session_start(); 

会话现在正在运作。

供参考检查此php manual信息。