2012-04-04 63 views
2

后,我有处理这种机制过期会话:与后重定向会话过期

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,但原来它只是增加了PA比例到网址。问题是,服务器端不接受GET,只接受POST。我一直在想其他方式来做到这一点,比如自动保存功能,javascript发布和重定向等。

有人肯定遇到过这个问题。

任何想法?

+1

我认为你可以保存在一个会议本身的数据。也就是说,在您注意到用户提交表单后会话已过期后,将他在会话中输入的数据存储并重定向到登录页面。用户登录并重定向回表单页面后,可以使用会话中的数据填充表单字段。 – Joris 2012-04-04 06:41:54

回答

0

有几种方法,我认为

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

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

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

4)不断用ajax(ping)检查会话。例如每60秒。除非浏览器不紧密,会议将永不过期(对我来说最好的解决方案)

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

有可能是当然的另一种选择

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