我对PHP还比较陌生,正在尝试使用会话(sessions)来检查用户是否已登录网站,以便他们可以获得访问特定页面的权限。
这是一件复杂的事情吗?或者只是因为我是新手所以无法弄明白?
我对PHP还比较陌生,正在尝试使用会话(sessions)来检查用户是否已登录网站,以便他们可以获得访问特定页面的权限。
这是一件复杂的事情吗?或者只是因为我是新手所以无法弄明白?
登录并不太复杂,但是几乎所有登录过程都需要一些特定的部分。
首先,请确保在所有需要知道已登录状态的页面上启用会话变量,将以下内容放置在这些页面的开头:
session_start();
接下来,当用户通过登录表单提交他们的用户名和密码时,您通常会通过查询包含用户名和密码信息(如MySQL)的数据库来检查它们。如果数据库返回匹配项,则可以设置一个会话变量来包含该事实。您可能还想包括其他信息:
if (match_found_in_database()) {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username; // $username coming from the form, such as $_POST['username']
// something like this is optional, of course
}
接下来,在依赖于登录状态的页面上加入以下内容(不要忘记session_start()
):
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
echo "Welcome to the member's area, " . htmlspecialchars($_SESSION['username']) . "!";
} else {
echo "Please log in first to see this page.";
}
这些是基本组件。如果您需要有关SQL方面的帮助,互联网上有很多教程可供参考。
tmp
目录中。攻击者能否修改会话数据以登录自己?这是我应该关心的问题吗?此外,我应该避免将加密密钥存储在会话中吗? - Indiana Kernick您希望对任何需要执行会话检查的页面进行操作,都需要以以下方式开始:
session_start();
从那儿开始,你需要检查你的会话数组中是否有一个变量指示他们已经登录:
if (!$_SESSION["loggedIn"]) {
redirect_to_login();
die;
}
将用户登录,实际上就是设置该值:
$_SESSION["loggedIn"] = true;
session_start();
检查$_SESSION["loggedIn"]
是否不是true - 如果不是,则将其重定向到登录页面。
if($_SESSION["loggedIn"] != true){
echo 'not logged in';
header("Location: login.php");
exit;
}
您可以创建一个会话并将其放置:
// Start session
session_start();
// Check do the person logged in
if($_SESSION['username']==NULL){
// Haven't log in
echo "You haven't log in";
}else{
// Logged in
echo "Successfully logged in!";
}
注意:您必须创建一个包含$_SESSION['username'] = $login_input_username;
的表单。
session_start(); // get a session to manipulate
session_unset(); // remove all server data on the session
session_regenerate_id(true); // create a new session id to prevent hijacking
这通常应该放在注销脚本中。
<?php
define('DB_HOST', 'Your Host[Could be localhost or also a website]');
define('DB_NAME', 'database name');
define('DB_USERNAME', 'Username[In many cases root, but some sites offer a MySQL page where the username might be different]');
define('DB_PASSWORD', 'whatever you keep[if username is root then 99% of the password is blank]');
$link = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
if (!$link) {
die('Could not connect line 9');
}
$DB_SELECT = mysql_select_db(DB_NAME, $link);
if (!$DB_SELECT) {
die('Could not connect line 15');
}
$valueone = $_POST['name'];
$valuetwo = $_POST['last_name'];
$valuethree = $_POST['email'];
$valuefour = $_POST['password'];
$valuefive = $_POST['age'];
$sqlone = "INSERT INTO user (name, last_name, email, password, age) VALUES ('$valueone','$valuetwo','$valuethree','$valuefour','$valuefive')";
if (!mysql_query($sqlone)) {
die('Could not connect name line 33');
}
mysql_close();
?>
请确保使用phpMyAdmin来处理所有数据库相关的事务。这是一个非常易于使用的工具。您可以在此处找到它:phpMyAdmin
mysql
替换为mysqli
,它在开发/测试环境中也是一个不错的示例,但在生产中,它是糟糕的代码。__不要使用!_ - theking2else if (isset($_GET['actie']) && $_GET['actie']== "aanmelden"){
$username= $_POST['username'];
$password= md5($_POST['password']);
$query = "SELECT password FROM tbl WHERE username = '$username'";
$result= mysql_query($query);
$row= mysql_fetch_array($result);
if($password == $row['password']){
session_start();
$_SESSION['logged in'] = true;
echo "Logged in";
}
}