如何为登录页面创建会话


How to create sessions for a login page?

有两个输入字段,一个用于将用户名作为密码。用户名和密码从数据库中获取,如果找到用户名和密码组合,则标志设置为 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')
}