1

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

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

目前,当访问一个只登录的页面时,我使用的是 Yii 的loginRequired方法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。

4

2 回答 2

0

我还没有听说过内置的方法来做到这一点。但是,当您单击链接时,我假设您点击了某种评论保存 URL,那么这是重定向到登录页面吗?

你会想要首先实际点击操作函数,所以它必须允许访客访问该函数,然后手动执行重定向,而不是让 Yii 使用访问规则等进行。

一旦进入您自己的功能,您将希望以某种方式将该数据与该访问者联系起来,通常的方式是,$_SESSION但当他们登录时会重新生成。您的另一个选择是 cookie 数据。

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

希望有帮助,还是我完全错过了重点?

测试后更新
OK,似乎 SESSION 数据在会话 ID 重新生成后仍然存在。所以你可以简单地存储在会话中。

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

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

于 2012-12-21T08:52:33.983 回答
0

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

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

于 2012-12-21T09:03:05.050 回答