从 javascript 到 php 文件进行异步调用时,如何确保 php $_session 信息(我相信这是基于 cookie)与异步请求一起发送?
我听说 cookie 信息随所有 HTTP 请求一起发送,但我发现 jquery 的 $.get() 和 $.post() 请求无法让接收的 PHP 文件读取 $_session 信息。
接收 php 文件尝试以正常方式读取 $_session 信息:
session_start();
if(isset($_SESSION['user'])){
.....
如果接收的 php 文件是通过网络浏览器直接访问的,则可以访问会话信息。
谢谢!
*更新*
我发现失败的是 session_start() 命令。该命令导致以下文件返回“0”而不是预期的“无可用会话”响应。
whois.php:
$s = session_start();
if($s){
if(isset($_SESSION['user'])){
if(isset($_POST['name'])){
echo $_SESSION['user']." ".$_POST['name'];
}elseif(isset($_GET['name'])){
echo $_SESSION['user']." ".$_GET['name'];
}
}else{
echo 'no user specified';
}
}else{
echo 'no session available';
}
为了彻底起见,我通过直接 URL 导航到 Web 浏览器来测试上面的 php 文件,并访问 php 会话并输出正确的响应。我想知道为什么它不能异步工作......
根据 Pekka 的请求,这里是发出异步请求的 php 文件:
<?PHP
session_start();
if(isset($_GET['user'])){
$_SESSION['user'] = $_GET['user'];
}
?>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#response").html('---');
$("#form").submit(function(){
var formData = $(this).serialize();
$.post("whois.php",formData,function(data){
$("#response").html(data);
});
return false;
});
});
</script>
</head>
<body>
<form id="form">
<input name="name" type="text"/>
<input name="submit" type="submit"/>
</form>
<div id="response">
</div>
</body>
</html>