PHP会话对AJAX不持久
PHP session not persistent with AJAX
我正在制作一个需要用户登录的网站(在本地开发);我以php-login.net框架为起点,让我的代码与MySQL对话并创建会话。
我已经讨论了关于php会话和ajax的大多数SO问题;但我仍然无法让我的代码按我想要的方式工作。
现在,我正在使用ajax在用户成功登录后调用其他一些php脚本,但它不能正常工作。在firefox中,清除了所有cookie、历史记录等后,似乎没有使用ajax调用来维护会话变量。但是,如果我先注销,然后再登录,那么会话变量似乎可以正确地通过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!";
}
?>
当我使用以前从未登录过的浏览器登录时,我看到它设置了会话IDX;然而,当按下按钮并进行ajax调用时,我会看到一个新的会话IDY。然后我注销并重新登录,看到我的会话ID是Y(在ajax之前),并且当我单击按钮时(在ajax之后),我的会话标识是Y。
我还注意到,如果我继续登录&在不按下视图示例按钮的情况下,每次都会生成一个新的会话id。然而,只要我按下按钮,就会创建一个全新的会话id,如果我注销然后重新登录,它似乎总是被设置的。
我错过了什么?确保创建的第一个会话在整个ajax调用中得到维护的正确方法是什么?我应该将会话id发布到被调用的脚本吗?
这就是我解决问题的方法(因为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!";
}
?>
- 调用后不异步Ajax忽略函数
- 如何在不使用ajax的情况下将pair值添加到数组并发送到django中的视图
- Rails 4中不执行Ajax响应
- AJAX 表单不是 AJAX 提交
- yii2不允许ajax访问会话
- 分页-标准php或不使用ajax重新加载页面
- 在不执行ajax请求的情况下,使用jQuery读取HTTP标头以检查404
- 如何在不使用AJAX刷新的情况下发送表单的数据
- 提交链接时不刷新,也不使用ajax
- javascript/jquery没有'我不使用ajax
- 谷歌地图标记不显示ajax json数据
- 使用不带ajax的post发送数据
- append()不是ajax数据srting中的jQuery函数
- 如果我使用html表单(而不是ajax),则获取服务器的响应代码或返回值
- 在不使用AJAX的情况下将JSON字符串发送到php文件
- 不显示 AJAX 加载程序
- jquery不解析ajax结果
- TypeError: $ 不是 AJAX 和 Wordpress 中的函数
- 角度$cookies不持久
- PHP会话对AJAX不持久