我有一个登录表单从数据库中获取哈希密码。如果“提交检查”<input type="hidden">
等于1(下面的示例将更好地解释这一点),则显示页面内容,如果不等于1,则显示登录表单。表格如下:
<div id="login" style="<?php echo $style ?>"> //$style is by default "visibility:visible;" but will change to "visibility:hidden;" when correct login info is given
<p>Log in</p>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input type="text" id ="username" name="username" value="Username" onfocus="if (this.value == 'Username') this.value=''">
<input type="password" id="password" name="password" value="passpass" onfocus="if (this.value == 'passpass') this.value=''">
<br>
<input type="submit" name="submit" value="Log Ind">
<input type="hidden" name="_submit_check" value="1"> //Submit checker. if set, process login information
</form>
</div>
<p>No user? Make one <a href="register.php">here.</a></p>
</div>
这适用于我的PHP示例,但有一点令人讨厌的事情......您必须在每次查看页面的简单时间登录。因此,我在PHP脚本中执行了此操作:
<?php
session_start();
$db = DB::connect('mysql://username:pass@host/database');
if (DB::isError($db)){
die("Can't connect: " . $db->getMessage());
}
$style = "visibility:visible;";
$passwordHash = sha1($_POST['password']);
$_SESSION['login'] = $_POST['_submit_check']; //This is the submit checker I mentioned before
$sql = 'SELECT username FROM user WHERE username = ? AND passwordHash = ?';
$result = $db->query($sql, array($_POST['username'], $passwordHash));
if ($_SESSION['login'] == 1) {
if ($result->numRows() < 1)
{
echo '<p>Correct your username and password please</p>';
}
else {
$style = "visibility: hidden;";
echo '<p>This is the page content</p>';
}
}
?>
我不应该将$ _POST ['_ submit_check']值添加到名为'login'的$ _SESSION []变量中,这样用户只需要每隔24分钟登录一次吗?这就是我想要的,但它没有发生......
我希望你理解我的问题,如果没有,请对你不理解的内容发表评论。我很难在这个问题上解释我的想法;)
答案 0 :(得分:2)
您正在覆盖$_SESSION['login']
每个请求,因为您正在分配$ _POST值而不检查它是否真的已设置。
if(isset($_POST['_check_submit'])) {
$_SESSION['login'] = $_POST['_check_submit'];
}
答案 1 :(得分:1)
我不是百分百肯定,因为没有给出其他代码,但您似乎错过了启动或加载会话所需的session_start()
调用。可悲的是$_SESSION
并不足以代表你开始会议。如果没有此调用,$_SESSION
将在每个脚本的开头处为空,并且永远不会初始化为会话数据。
话虽如此,可以使用session.auto_start
php.ini指令配置PHP以自动为每个脚本启动会话,假设您有足够的控制权来更改它。