我正在开发一个AJAX登录系统,我不知道如何将PHP会话变量从AJAX返回到登录页面。我的问题是,如果可能的话,如何将php变量返回到登录页面。以下是我创建的示例。
登录页面
<?php
session_start();
?>
<form>
<input type="text" id="username" />
<input type="text" id="password"/>
<input type="button" id="submit" />
</form>
<script type="text/javascript" >
$('#submit').click(function() {
var username = $('#username').val();
var password = $('#password').val();
$.post('ajax_file.php',
{
username: username,
password:password,
},
function (data) {
/* what do I do here that will return the php variable
$_SESSION['user_id'] and let the user be logged in when
they go to homepage.php*/
setTimeout('window.location.href="homepage.php"', 2000);
});});
</script>
这是ajax页面。我理解逻辑对于会话变量突然冒出没有意义,让我们假设它是在页面的前面创建的。
$username = $_POST['username'];
$password = $_POST['password'];
if(login($username, $password)) {
return $session_user_id = $_SESSION['user_id'];
}
答案 0 :(得分:2)
您可以执行AJAX帖子,将会话变量设置为接收帖子的页面中的会话,并将其存储在会话中(它是同一个会话)。在AJAX回调中将用户转发到主页。
当然,您必须考虑登录凭据不正确的情况。
答案 1 :(得分:1)
诀窍在于你的JavaScript根本不需要了解会话;您可以通过the respective ini setting将PHP配置为使用HttpOnly
cookie进行会话管理。
我会像这样实现AJAX脚本:
session_start(); // start the session
if (login($username, $password)) {
// alter session to hold user id
$_SESSION'user_id'] = $user_id_from_database_or_something;
return true;
} else {
return false;
}
AJAX完整处理程序查看返回值并重定向到主页(如果它是true
)。类似下面的内容(我假设PHP return
被翻译成echo json_encode($return_value)
:
if (data) {
// do redirect
} else {
// login failed
}
然后,当用户访问主页时,他们的浏览器会发送一个会话cookie,以便您确定他们是否已登录。
答案 2 :(得分:0)
改善答案
FOr Jquery,USe函数
function sendAjax(showAllExist, controller)
{
$.ajax({
type: "post",
url: login.php,
data: yourformdatacomeshere,
beforeSend: function() {
//do whatever you want to do before request
},
error: function() {
//display in case of error
},
success: function(data) {
//display in case of error
if(data!=""){
//redirect use to home pahe
window.location.href ='homepage.php';
}else{
//display login is not correct
}
},
complete: function() {
//hide any event which you have started on beforeSend
}
});
return true;
}
答案 3 :(得分:0)
你不能这样做:
$.post('ajax_file.php',
{
username: username,
password:password,
loginSession: <?php echo $_SESSION['user_id']; ?>
},
function (data) {
//Check here if login is correct.
if correct, create this variable:
var logged= "?logged="+data.SessionID;
/* what do I do here that will return the php variable
$_SESSION['user_id'] and let the user be logged in when
they go to homepage.php*/
setTimeout('window.location.href="homepage.php"+logged+"'", 2000);
});})
当数据返回到没有会话ID的homepage.php时。
php脚本上的执行此操作:
if(isset($_GET['logged'])){
start_session();
$_Session['LOGGED']='true';
}
答案 4 :(得分:0)
使用上面即兴回答即兴创作的方法。
你的ajax文件代码
$username = $_POST['username'];
$password = $_POST['password'];
if(login($username, $password)) {
$session_user_id = $_SESSION['user_id'];// this is from your code
$responseArray = array("message"=>"success","sessionId"=>$session_user_id);
}
else
{
$session_user_id = "";
$responseArray = array("message"=>"error","sessionId"=>$session_user_id);
}
echo json_encode ( $responseArray );
die ();
然后在ajax函数中进行以下更改。
var frmdata = jQuery("#logindata").serialize(); // which contains the data of username and password
jQuery.ajax({
type : "POST"
,url :'ajax_file.php'
,data :frmdata
,dataType: "json"
,success : function(data){
if(data.message == "success")
{
//redirect it to your desire page
}
else
{
//redirect it to your login page
}
}
,beforeSend: function(html){
// some loader goes here while ajax is processing.
}
});
希望这个帮助可以随意提出任何答案。