• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rzh
V2EX  ›  程序员

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

  •  
  •   rzh · Jan 5, 2017 · 10248 views
    This topic created in 3424 days ago, the information mentioned may be changed or developed.
    ajax 跨域请求 php 后台,用 session 作为会话控制,没刷新一次页面就生成新的 sessionid ,无法记录上次保存的内容,怎么解决呢。
    19 replies    2017-01-06 17:48:33 +08:00
    dwood
        1
    dwood  
       Jan 5, 2017
    cookie 不能跨域,要不把 sessionid 重写到 url 上?
    ic2y
        2
    ic2y  
       Jan 5, 2017
    抓住问题的关键,为什么刷新一次,就生成新的 sessionid ?无非是两种情况。

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

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