有两个输入字段,一个用于将用户名作为密码。用户名和密码从数据库中获取,如果找到用户名和密码组合,则标志设置为 1。
$match = 1;
if ($match) {
header('Location: http://www.example.com/myProfile');
} else {
header('Location: http://www.example.com/errorpage');
}
页面仍然存在问题,任何人都可以输入网址"www.example.com/myPforile"并访问内容。如何防止创建会话变量?
下面是我用来查看会话是否已设置的代码示例:
<?php
session_start();
if(!isset($_SESSION['userId'])){
header('Location: http://example.com/errorpage');
}else{
header('Location: http://www.example.com/myProfile');
}
?>
希望有帮助。
这是我的建议。
首先,请确保在页面顶部包含session_start();
。
对于 PHP 代码,您的登录页面应如下所示。
if($_POST['submit']=='Login') {
$err = array();
// will hold our errors
if(!$_POST['email'] || !$_POST['password'])
$err[] = 'All the fields must be filled in!';
if(!count($err)) {
$row = mysql_fetch_assoc(mysql_query("SELECT id FROM members WHERE email='{$_POST['email']}' AND pass='".$hash."'"));
if($row['id'])
$_SESSION['id'] = $row['id'];
}
}
然后在您希望要求登录的任何页面上放置一些检查您创建的会话 ID 的内容。
if(!isset($_SESSION['id']) || empty($_SESSION['id'])) {
// redirect them to the login page, they have no session id set
}
这是我所做的事情的一个基本例子。 一定要扩展它并根据您的需求进行调整。
如果我正确理解您的问题,那么您没有保护您的myProfile
页面。
您需要做的是在成功登录后设置一个会话变量,并在myProfile
顶部检查该会话变量。
我假设你的意思是你仍然可以在不登录的情况下访问该页面,在这种情况下,你需要做一些类似于
$logged in = $_SESSION['loggedin'];
if($loggedin) {
die('whatever not allowed here or something')
}