我有一种处理过期会话的机制:
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发布和重定向等。
之前有人必须遇到过这个问题。
有什么想法吗?
答案 0 :(得分:1)
我认为有几种方法
1)将session.gc_maxlifetime
值增加到更高(1天或更长)。如果使用自己的会话,则使用相同的逻辑。
2)除非用户注销
,否则会话永不过期3)当用户提交POST并且会话过期时,将表单数据存储到会话本身并在重定向从会话中获取数据之后。或者在重定向后使用get方法
4)继续用ajax(ping)检查会话。例如每60秒。除非浏览器没有关闭,否则会话将永不过期(对我来说是最佳解决方案)
5)使用ajax从提交,如果会话到期弹出一个对话框重新登录
当然还有其他选择
答案 1 :(得分: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