gpt4 book ai didi

javascript - PHP session 与 AJAX 不持久

转载 作者:行者123 更新时间:2023-11-28 00:09:39 24 4
gpt4 key购买 nike

我正在制作一个需要用户登录的网站(本地开发);我用过php-login.net framework作为我的起点,让我的代码与 MySQL 对话并创建 session 就好了。

我已经浏览了大部分 SO question关于 php session 和 ajax;但我仍然无法让我的代码按照我想要的方式工作。

现在,我在用户成功登录后使用ajax调用其他一些php脚本,但它无法正常工作。在 Firefox 中,清除了所有 cookie、历史记录等后,看起来 session 变量并不是通过 ajax 调用来维护的。但是,如果我 log-out然后重新登录, session 变量似乎已通过 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!";
}

?>

当我使用以前从未登录过的浏览器登录时,我看到它设置了一个 session IDX;然而,当按下按钮并进行 ajax 调用时,我看到一个新的 session ID Y。然后我注销并重新登录,看到我的 session ID 是 Y (在 ajax 之前),当我单击按钮时(在 ajax 之后)我的 session ID 是 Y )。

我还注意到,如果我在不按“查看示例”按钮的情况下继续登录和退出,每次都会生成一个新的 session ID。然而,一旦我按下按钮,就会创建一个全新的 session ID,它似乎始终是我注销然后重新登录时设置的 session ID。

我错过了什么?确保在整个 ajax 调用过程中维护创建的第一个 session 的正确方法是什么?我应该将 session ID 发布到被调用的脚本吗?

最佳答案

这就是我解决问题的方法(因为上面 Freaktor 的评论没有解决问题) - 我通过 AJAX 手动传递 session ID,然后在新的 PHP 脚本中设置它。 我想知道是否有人可以对此的安全性发表评论(因为我不完全确定这一切是如何运作的)?

Thisthis帖子很有帮助。

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!";
}

?>

关于javascript - PHP session 与 AJAX 不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31013891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com