ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Ajax重置PHP会话

2019-11-09 06:31:11  阅读:254  来源: 互联网

标签:ajax session-variables session-cookies session php


我知道this question has been asked before,所以我提前致歉,但是我已经多次超过了他的解决方案,在我看来,这不能解决会话重置问题.

我有一个简单的php页面,它输出用于调试的会话ID.像这样:

<?php
session_start();
echo session_id();
?>

然后,我有一个带有jQuery的简单HTML页面,该页面在该页面上执行ajax请求并记录输出.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
      $.post('http://localhost.api.mydomain/sid', {
        some: 'data'
      }, function(data,status) {
        console.log(data);
      });
    </script>
  </head>
  <body>
    Check your console.
  </body>
</html>

如果我手动访问URL http://localhost.api.mydomain/sid,则输出不会更改,session_id()会保持不变,正如预期的那样.但是,如果刷新ajax页面,则每次刷新输出的session_id()都会更改.

我试过在php.ini文件中设置session.cookie_domain,但无济于事.对于这个问题,我深表歉意,但我根本找不到解决方法.

解决方法:

这是一个访问控制问题,而不是ajax问题.

当您直接从浏览器访问URL时,您正在从所访问的域中请求一个(会话)cookie.在这种情况下,使用ajax时,您是从不是您要访问的域的域请求cookie.

在api.example.com上的php API文件上,尝试执行此操作.

header('Access-Control-Allow-Origin: example.com');
header('Access-Control-Allow-Credentials: true');

然后在ajax请求文件上,像这样使用xhrFields参数.

  $.ajax({
    url: 'https://api.example.com',
    xhrFields: { withCredentials: true },
    success: function(data) {
      console.log(data)
    }
  });

现在,只要您从来源example.com调用请求,Cookie就会像预期的那样运行.

标签:ajax,session-variables,session-cookies,session,php
来源: https://codeday.me/bug/20191109/2012048.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有