我有一个简单的控制器,它显示要批准的确认信息。当用户按下注册按钮时,会显示确认页面。
但是当用户在没有注册的情况下输入 url 为 ..../confirmation 时,会显示该页面。我不希望它在没有注册的情况下显示。
在 asp.net mvc4 中,这可以通过 ChildActionOnly 注释来完成。
可能吗?
我有一个简单的控制器,它显示要批准的确认信息。当用户按下注册按钮时,会显示确认页面。
但是当用户在没有注册的情况下输入 url 为 ..../confirmation 时,会显示该页面。我不希望它在没有注册的情况下显示。
在 asp.net mvc4 中,这可以通过 ChildActionOnly 注释来完成。
可能吗?
首先确保您已启动会话:
<?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']);
}
如果没有看到你的代码,我不完全理解你想要实现的目标。但听起来您不希望有人能够在不先执行操作的情况下访问特定页面。
像这样的东西可能会帮助你。
<?php
session_start();
if(!session_is_registered(somesessionamehere)){
header("location:form.php");
}
?>
当用户提交表单时注册一个会话,然后当他们转到该页面时,它会检查会话是否已注册。如果不是,那么它会重定向到上一页。
查看此 URL 以获取基于登录的示例:http ://www.phpeasystep.com/phptu/6.html
据我了解,您需要在确认页面上检查用户是否刚刚发送了注册数据。
例如,如果您的表单中有一个名为“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
// [...]