1

我有一个简单的控制器,它显示要批准的确认信息。当用户按下注册按钮时,会显示确认页面。

但是当用户在没有注册的情况下输入 url 为 ..../confirmation 时,会显示该页面。我不希望它在没有注册的情况下显示。

在 asp.net mvc4 中,这可以通过 ChildActionOnly 注释来完成。

可能吗?

4

3 回答 3

0

首先确保您已启动会话:

<?php session_start(); ?>

好的,这似乎很简单——在注册之后,在将用户重定向到确认页面之前,做这样的事情(这自然是伪代码)。假设 $user->registered() 作为注册的结果返回 TRUE/FALSE,并且 $user->hasConfirmedRegistration() 作为重新注册确认的结果返回 TRUE/FALSE。因此,您应该执行以下操作:

//this should be in your registration controller/function, i.e. /users/register
if ($user->registered()) {
   $_SESSION['showConfirmation'] = TRUE;
}

然后你应该把它放在你的函数的开头,以防止向非注册用户显示你的确认页面。

//This should be in your confirmation controller/function, 
//i.e. /users/confirm_registration:

//if user has not registered, do not show the page
if (! $_SESSION['showConfirmation']) {
   header('Location: /'); // redirect to main page
   return;
}

// -- enter code that handles storing confirmation, handling $_GET/$_POST etc. --

//then unset session variable, which is no longer needed
if ($user->hasConfirmedRegistration()) {
   unset($_SESSION['showConfirmation']);
}
于 2013-09-26T09:09:47.830 回答
0

如果没有看到你的代码,我不完全理解你想要实现的目标。但听起来您不希望有人能够在不先执行操作的情况下访问特定页面。

像这样的东西可能会帮助你。

<?php
session_start();
if(!session_is_registered(somesessionamehere)){
header("location:form.php");
}
?>

当用户提交表单时注册一个会话,然后当他们转到该页面时,它会检查会话是否已注册。如果不是,那么它会重定向到上一页。

查看此 URL 以获取基于登录的示例:http ://www.phpeasystep.com/phptu/6.html

于 2013-09-26T09:09:49.363 回答
0

据我了解,您需要在确认页面上检查用户是否刚刚发送了注册数据。

例如,如果您的表单中有一个名为“login”的输入字段,则可以根据表单“method”属性检查“login”的存在$_REQUEST$_POST$_GET。如果它不存在,则该表单尚未发布,您可以假设用户刚刚输入了 URL。您可以将他重定向到登录页面。

<form method="post" action="/confirmation">
    <input type="text" name="login" />
    [...]
    <input type="submit" />
</form>
<?php
if (!isset($_POST["login"])) {
    // redirect
    header("HTTP/1.0 302 Found");
    header("Location: /login");

    return;
}

// show confirmation
// [...]
于 2013-09-26T09:11:02.193 回答