我正在尝试从索引页面创建一个登录面板。登录数据将通过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>
答案 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信息。