V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rzh
V2EX  ›  程序员

ajax 跨域请求 php, sessionid 一直变化

  •  
  •   rzh · 2017-01-05 11:04:51 +08:00 · 9541 次点击
    这是一个创建于 2886 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ajax 跨域请求 php 后台,用 session 作为会话控制,没刷新一次页面就生成新的 sessionid ,无法记录上次保存的内容,怎么解决呢。
    19 条回复    2017-01-06 17:48:33 +08:00
    dwood
        1
    dwood  
       2017-01-05 11:19:07 +08:00
    cookie 不能跨域,要不把 sessionid 重写到 url 上?
    ic2y
        2
    ic2y  
       2017-01-05 11:19:53 +08:00
    抓住问题的关键,为什么刷新一次,就生成新的 sessionid ?无非是两种情况。

    1.浏览器这边删除了 session (可能是某些反追踪插件的原因),自己用 Chrome 自带的调试功能,观察请求,看看 sessionid 在 cookie 里还在不在。

    2.那就是你自己的代码问题。这就没什么好说的了。不要浪费其他无谓的时间,专心找找 你 操作 session 和 cookie 的部分,看看你操作 cookie 的时候,是不是重置了什么东西。这一步,也能在 Chrome 的调试功能里看到一些 set-cookie 的 header
    rzh
        3
    rzh  
    OP
       2017-01-05 11:25:29 +08:00
    @dwood p3p 说可以让 cookie 跨域,但是没有成功,把 sessionid 返回到前端再每次访问时提交过来,总觉得不安全。重写该怎么去做呢。
    dwood
        4
    dwood  
       2017-01-05 11:35:51 +08:00
    @rzh 重写就跟你说的差不多吧, cookie 跨域需要设置 Access-Control-Allow-Origin , Access-Control-Allow-Credentials 两个属性吧,服务端和网页都要设置。
    rzh
        5
    rzh  
    OP
       2017-01-05 11:37:50 +08:00
    @ic2y 如果没有跨域的话, sessionid 就不会改变,只要一出现跨域就会出现 sessionid 一直在变化, get 请求用 jsonp 可以解决, ajax 的 post 请求每访问一次就出现新的 sessionid 。
    rzh
        6
    rzh  
    OP
       2017-01-05 11:39:20 +08:00
    @dwood 这两个属性我设置了,不设置的话,请求就过不来,数据都可以正常的提交和返回,就是 session 的问题一直没解决。
    angusun
        8
    angusun  
       2017-01-05 11:40:13 +08:00
    @rzh 我推荐读一下这个文章, 讲的蛮清楚的。
    rzh
        9
    rzh  
    OP
       2017-01-05 11:42:35 +08:00
    @dwood Access-Control-Allow-Credentials 这个属性,在 ajax 也需要添加一行代码 xhrFields:{
    withCredentials:true
    },
    这样确实可以解决 session 的问题,但总感觉前端参与处理的太多,能不能只动后台就可以结局呢。
    rzh
        10
    rzh  
    OP
       2017-01-05 11:43:11 +08:00
    @angusun 好的,谢谢,我先看一下。
    dwood
        11
    dwood  
       2017-01-05 11:50:38 +08:00
    @rzh 就加了一行代码就多了。。。强迫症啊
    sheldondai
        12
    sheldondai  
       2017-01-05 11:57:24 +08:00
    13 楼正解 @rzh
    batnss
        13
    batnss  
       2017-01-05 14:03:34 +08:00
    正解
    R18
        14
    R18  
       2017-01-05 14:06:17 +08:00
    13L 果然是正解
    zouqqz
        15
    zouqqz  
       2017-01-05 17:26:45 +08:00
    跨子域的话要设置 php.ini 中的 session.cookie_domain = .mydomain.com ,跨域名的话只能网址带参数
    eoo
        16
    eoo  
       2017-01-05 18:02:33 +08:00 via Android
    17 楼正解
    mzsongyan
        17
    mzsongyan  
       2017-01-05 19:49:10 +08:00 via iPhone
    正解
    halfcoder
        18
    halfcoder  
       2017-01-05 23:02:54 +08:00
    正解
    az999
        19
    az999  
       2017-01-06 17:48:33 +08:00
    https://www.v2ex.com/t/317862#reply8 ,这是我的一些历程,希望能帮到你,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2775 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:46 · PVG 13:46 · LAX 21:46 · JFK 00:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.