Yii在登录前保存表格

时间:2012-12-21 07:50:01

标签: php session login yii

我有一个用户可以发表评论的页面。为了提高用户参与度,我想让他们输入他们的评论,即使他们没有记录/注册,只有在他们提交后才会登录。

实现这一目标的最佳/标准方法是什么?

目前,在访问仅登录页面时,我使用的是loginRequired

的Yii Redirects the user browser to the login page. Before the redirection, the current URL (if it's not an AJAX url) will be kept in {@link returnUrl} so that the user browser may be redirected back to the current page after successful login.方法

然而,这仅保存URL,而不是POST数据。

另一方面,我正在使用Yii-Rights。

2 个答案:

答案 0 :(得分:0)

我没有听说过这样做的内置方法。但是当你点击链接时,我假设你点击某种评论保存网址,那么这是重定向到登录页面?

你想要先实际点击动作功能,所以它必须允许访客进入该功能,然后手动重定向,而不是让Yii用访问规则等来做。

在您自己的功能中,您需要将该数据与该访问者联系起来,通常的方式是$_SESSION,但在登录时会重新生成。您的另一个选择是cookie数据。

你可以在一个或两个cookie中设置评论数据,使用你的cookie保存功能的返回URL重定向到登录页面,甚至可以用一个标志告诉它检查COOKIE而不是POST。并从那里继续。

希望有帮助,或者我完全错过了这一点?

<强>更新
测试完成后,会出现SESSION数据在会话ID重新生成时持续存在。所以你可以简单地存储在会话中。

我喜欢Ian Atkins方法,但它带来了垃圾邮件机器人的问题,你必须使用Captcha或其他方法来对抗它。然而,如果您将其存储在会话中,则在用户登录或注册之前,实际上不会将任何内容放入数据库中。

这取决于你真的,取决于你的网站有多大(对垃圾邮件机器人很有吸引力)以及在验证用户之前显示多条评论所需的灵活性。

答案 1 :(得分:0)

$_SESSION中为每个未登录的访问者创建GUID。使用GUID作为临时用户ID来保存评论。我可能会通过AJAX进行保存,并在回调中将它们发送到登录/注册页面。使用$_SESSION中的GUID将记录/注册之前发表的注释转换为具有新/现有用户ID的完全限定注释。

在显示方面,您可以轻松地与ID和未注册用户的用户并排评论。它使您的“用户”和“评论”表格更加复杂,但我认为这是完全可行的。