我正在制作一个需要用户登录的网站(在本地开发);我已经使用php-login.net framework作为我的起点,让我的代码与MySQL交谈并创建会话就好了。
我经历过大多数关于php会话和ajax的SO question;但我仍然无法让我的代码按照我想要的方式工作。
现在,我在用户成功登录后使用ajax调用其他一些php脚本,但是它无法正常工作。在firefox中,清除了所有cookie,历史记录等,看起来会话变量不会被ajax调用维护。但是,如果我log-out然后重新登录,则会话变量似乎在ajax中正确传递。
例如:
在我的logged_in.php脚本中,我使用ajax调用另一个脚本:view_samples.php。
logged_in.php
<script type="text/javascript" src="/js/loggedInButtons.js" > </script> <!-- all our ajax calls are here -->
<?php
// debug some variables
print_r($_SESSION);
echo "<br>" . session_id() . "<br>";
// if logged in
if ($_SESSION['logged'] == 1) {
?>
<button class='btn btn-primary' id="view_samples"> View samples</button> <!-- calls view_samples.php -->
<div id="ajaxResult"></div> <!-- results of ajax calls go here -->
<?php
}
?>
loggedInButtons.js
$(document).ready(function(){
$("#view_samples").click(function(){
$.ajax({
url: "view_samples.php",
cache: false,
success: function(result){
$("#ajaxResult").html(result);
}
});
});
}
view_samples.php
<?php
session_start():
// debug session
print_r($_SESSION);
echo "<br>" . session_id() . "<br>";
if ($_SESSION['logged'] == 1) {
// do something because we are properly logged in
} else {
echo "not logged in!";
}
?>
当我使用以前没有登录的浏览器登录时,我看到它设置会话ID X ;但是当按下按钮并进行ajax调用时,我看到一个新的会话ID Y 。然后我注销并重新登录,看到我的会话ID是 Y (在ajax之前),当我点击按钮时,我的会话ID是 Y (在ajax之后) )。
我也注意到如果我一直登录&amp;在没有按下视图样本按钮的情况下,每次都会生成一个新的会话ID。但是,只要按下按钮,就会创建一个全新的会话ID,如果我退出然后重新登录,它似乎总是设置的。
我错过了什么?什么是正确的方法来确保在ajax调用期间保持创建的第一个会话?我应该将会话ID发送到被调用的脚本吗?
答案 0 :(得分:1)
这就是我解决问题的方法(因为上面的Freaktor评论没有解决问题) - 我手动通过AJAX传递会话ID,然后在新的PHP脚本中设置它。 我想知道是否有人可以评论这个的安全性(因为我不完全确定这一切是如何工作的)?
<强> logged_in.php 强>
<script>var session_id = '<?php echo session_id();?>';</script> <!-- store our session ID so that we can pass it through ajax -->
<script type="text/javascript" src="/js/loggedInButtons.js" > </script> <!-- all our ajax calls are here -->
<?php
// debug some variables
echo "<br>" . session_id() . "<br>";
// if logged in
if ($_SESSION['logged'] == 1) {
?>
<button class='btn btn-primary' id="view_samples"> View samples</button> <!-- calls view_samples.php -->
<div id="ajaxResult"></div> <!-- results of ajax calls go here -->
<?php
}
?>
<强> loggedInButton.js 强>
var data = {func:'getData1',session_id:session_id}; // manually send the session ID through ajax
$(document).ready(function(){
$("#view_samples").click(function(){
$.ajax({
type: "POST",
data: data,
url: "view_samples.php",
success: function(result){
$("#ajaxResult").html(result);
}
});
});
}
<强> view_samples.php 强>
<?php
session_id($_POST['session_id']); // get the session ID sent by AJAX and set it
session_start():
// debug session
print_r($_SESSION);
echo "<br>" . session_id() . "<br>";
if ($_SESSION['logged'] == 1) {
// do something because we are properly logged in
} else {
echo "not logged in!";
}
?>