【问题标题】:redirect with post after session expire会话过期后使用帖子重定向
【发布时间】:2012-04-04 06:29:16
【问题描述】:

我有这样一个处理过期会话的机制:

User logged in
Session expires
User goes to link
User redirected to login page
User logs in
User redirected to requested link

我想要实现的是与表单具有相同的功能,例如:

User logged in
User starts to fill out a form
Session expires
User submits a form
User redirected to login page
User logs in
Form posted on behalf of user (aka redirect with post)

但到目前为止,它的工作原理是这样的:

User logged in
User starts to fill out a form
Session expires
User submits a form
User redirected to login page
User logs in
User redirected to form page with all fields empty
User sad

我尝试使用 http_redirect 来实现它,但结果它只是将参数添加到 URL。问题是,服务器端不接受 GET,只接受 POST。我一直在尝试其他方法来做到这一点,例如自动保存功能、javascript 发布和重定向等。

一定有人以前遇到过这个问题。

有什么想法吗?

【问题讨论】:

  • 我认为您可以将数据保存在会话本身中。也就是说,当您注意到用户提交表单时会话已过期后,存储他在会话中输入的数据并将他重定向到登录页面。用户登录并被重定向回表单页面后,您可以使用会话中的数据填充表单字段。
  • 你差点被这个 User sadxD 呛到

标签: php forms http post redirect


【解决方案1】:

我认为有几种方法

1) 将session.gc_maxlifetime 的值提高到更高(1 天或更长时间)。如果使用自己的会话,同样的逻辑。

2) 除非用户注销,否则会话永不过期

3) 当用户提交 POST 并且会话过期时,将表单数据存储到会话本身,并在重定向后从会话中获取数据。或者重定向后使用get方法

4) 使用 ajax (ping) 持续检查会话。例如每 60 秒。除非浏览器没有关闭,否则会话永远不会过期(对我来说是最好的解决方案)

5) 使用 ajax 提交,如果会话过期弹出对话框重新登录

当然还有其他选择

【讨论】:

    【解决方案2】:

    您可以选择以下内容:

    User logged in
    User starts to fill out a form
    Session expires
    
    User submits a form
    Server sees session has expired
    Server creates new session
    Server stores post in session variable $_SESSION['post'] = $_POST
    User redirected to login page
    
    User logs in
    Server verifies user etc
    Server checks for data in $_SESSION['post']
    Server sets $_POST = $_SESSION['post']
    Form posted on behalf of user
    

    【讨论】:

      猜你喜欢
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      相关资源
      最近更新 更多