3

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

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 发布和重定向等。

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

有任何想法吗?

4

2 回答 2

1

我认为有几种方法

1)将session.gc_maxlifetime值增加到更高(1天或更多)。如果使用自己的会话,则相同的逻辑。

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

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

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

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

当然可能还有其他选择

于 2012-04-04T06:45:03.987 回答
0

你可以去以下:

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
于 2012-04-04T06:51:20.380 回答