Ajax和PHP会话问题,简单的测试不会工作

时间:2017-04-25 09:51:50

标签: javascript php jquery html ajax

有一个奇怪的问题,在从js(localhost)执行ajax请求时没有存储会话。

我创建了一个我期望工作的简单演示,但是永远不会存储会话。但是,如果我直接从我的webbrowser访问php脚本,它会按预期工作并存储会话。

HTML:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />
    <script src="js/jquery-1.8.0.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function(){
        $.ajax({
            dataType: 'json',
            url: 'http://example.com/test.php',
            method: 'GET',
            success: function(response) {
                console.log(response);
            },
            error: function(error) {
                console.log(error);
            }
        });
    });
</script>

</body>
</html>

PHP:

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

/* Session start */
session_start();

/* Set headers */
header('Access-Control-Allow-Origin: *'); 
header('Content-Type: application/json');

if (!isset($_SESSION['test'])) {
    $_SESSION['test'] = 'abc';
    $result = 'session_set';

} else {
    $result = $_SESSION['test'];
}

echo json_encode(array('result' => $result));

?>

2 个答案:

答案 0 :(得分:0)

存在跨域限制,不是问题吗?

答案 1 :(得分:0)

首先,检查您的浏览器是否在AJAX请求中从服务器接收Set-Cookie标头。

其次,检查浏览器是否存储cookie并在后续请求中发送它,并且您没有从服务器收到任何新的Set-Cookie响应。

如果上述任何陈述都是错误的,那么服务器配置可能会出现问题,例如会话ID设置为存储在URL中 - 这显然不起作用。

很抱歉这么说,但是在localhost上我可以游泳。

如果您尝试跨域进行此操作,那么这是不可能的,因为不存在跨域Cookie。