gpt4 book ai didi

ajax - CakePHP: session 、自动重新生成、requestCountdown、AJAX 的问题

转载 作者:行者123 更新时间:2023-12-04 16:10:05 26 4
gpt4 key购买 nike

我在别处研究的

答案在 this question解释了如何使用 autoRegenerate 和 requestCountdown 来延长 session ,只要用户处于事件状态。

This question有一个解释 ajax 调用会发生什么的答案:

If you stay on the same page, JavaScript makes a request, which generates a new session_id, and doesn't record the new session_id.

All subsequent ajax requests use an old session_id, which is declared invalid, and returns an empty session.



在其他地方据说有些浏览器发送另一个带有 ajax 请求的 userAgent,如果必须保证 ajax 调用工作,Session.checkAgent 必须设置为 false。但由于那些 ajax 调用有时只会失败,我认为这不是问题的原因。

我的问题是

我已将 requestCountdown 设置为 1,但随后我在页面加载时自动执行 ajax 请求的页面上收到错误。我将 requestCountdown 增加到 4,这在大多数情况下应该足够了。但是某些浏览器的某些用户会收到错误消息,因为一个或多个 ajax 调用收到“403 Forbidden”作为响应。对于同一页面,有时会出现错误,有时不会。

我想要的是 session 长度是否为例如30 分钟,用户打开一个页面(或触发一个导致 ajax 调用的事件),比如说第 29 分钟, session 应该再延长 30 分钟。

但我似乎被困在两个问题之间:
  • 如果倒计时设置为大于1的值并且用户碰巧访问了一个不包含任何ajax请求的页面,倒计时值只减1,不会变为0,并且不会重新生成 session .例如。如果倒计时设置为 10,则用户必须单击 10 次才能重新生成 session 。
  • 如果倒计时设置为 1,则每次请求都会重新生成 session ,但在某些浏览器上,有时某些 ajax 调用会失败。

  • 我的问题

    为了确保我正确理解它: session 不能简单地延长,它必须“重新生成”,这意味着 session ID 已更改?

    也许这在概念上都是正确的,但我想知道我是否只是缺少一个额外的设置或让它工作的东西?

    示例性请求和响应 header (来自我的测试机)
    Request
    -------
    POST /proxies/refreshProxiesList/0 HTTP/1.1
    Host: localhost:84
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
    Accept: */*
    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    X-Requested-With: XMLHttpRequest
    Referer: http://localhost:84/users/home
    Cookie: CakeCookie[lang]=de; CAKEPHP=b4o4ik71rven5478te1e0asjc6
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Content-Length: 0

    Response
    --------
    HTTP/1.1 403 Forbidden
    Date: Tue, 18 Feb 2014 10:24:52 GMT
    Server: Apache/2.4.4 (Win32) OpenSSL/1.0.1e PHP/5.5.3
    X-Powered-By: PHP/5.5.3
    Content-Length: 0
    Keep-Alive: timeout=5, max=100
    Connection: Keep-Alive
    Content-Type: text/html; charset=UTF-8

    最佳答案

    CakePHP 使用带有 cookie 的 session 。在我看来,问题是虽然 session 本身可以通过超时选项延长,但 session cookie 不能轻易延长,因此无论如何您最终都会丢失 session 。该线程中的人建议刷新 session 以创建新的 cookie。

    正如有人建议的那样,您可以将 session cookie 的生命周期延长更长的时间,尽管问题仍然存在,但不会那么明显。也许您可以自己编写一些内容来重新保存 session cookie 并具有新的到期时间? ...虽然我没有发现有人这样做过,所以也许没有。

    谷歌搜索关于 cakephp 和 session cookie 过期的信息,这似乎是一个已知问题 CakePHP Session updates but cookie expiry doesn't人们已经为此制定了解决方法。

    关于ajax - CakePHP: session 、自动重新生成、requestCountdown、AJAX 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21785179/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com