目前我正在用PHP编写一个小媒体库,我想设置会话,因此用户保持登录状态并在首页回复他的名字。
[的index.php]
if(isset($_SESSION['loggedin']))
{
//ECHO $USERNAME
}else{
echo '<p>To start, please <a href="?page=login">login</a> or <a href="?page=register">register.</a></p>';
}
?>
我想,如果设置了会话ID,则PHP会回显$ username。
[signup.php]
<?php
session_start();
$conn = mysqli_connect("$host", "$user", "$pass", "$db");
$uid = ($_POST['uid']);
$pw = ($_POST['pw1']);
$pw2 = ($_POST['pw2']);
if ($pw == $pw2) {
$sql = "INSERT INTO user (uid, pw) VALUES ('$uid', '$pw')";
$result = mysqli_query($conn, $sql);
echo "Registration succeeded.";
}else{
echo "Please check your information.";
}
header ("Refresh: 3; ../index.php");
因此,在PHP成功比较我的$ pw1和$ pw2之后我想开始一个会话,那么它应该将$ username放在$ _SESSION数组中。
当然旁边是安全会话ID。
我再说一遍,在此之后我想在首页回复$ username。
最好的方法是什么? 感谢。
答案 0 :(得分:1)
$sql="SELECT username FROM users WHERE userid=$uid";
$result=mysqli_query($conn,$sql);
$row=mysqli_fetch_assoc($result);
$_SESSION['username']=$row['username'];
你可以这样做。
答案 1 :(得分:0)
使用$ _SESSION超级全局数组(精简版)
session_start(); //To init
$_SESSION['username'] = 'Bob'; // Store value
echo $_SESSION['username']; // Treat like normal array
详细示例
要使用会话,您必须先启动它。
session_start();
之后,您可以通过超级全局
访问会话变量$_SESSION
一种好方法是始终在要使用的变量中存储值:
// init session
session_start();
// check if session var is set, if not init the field with value in the super global array
if(!isset($_SESSION['auth'])) $_SESSION['auth'] = false;
if(!$_SESSION['auth']) {
//do auth here like eg.
header('Location: signup.php'); // if auth is okay -> $_SESSION['auth] = true + redirect to this (main) script
die(); // This is really necessary because a header redirect can be ignored.
}
// if auth okay, do fancy stuff here
为安全起见,请阅读以下内容
请务必忘记用户输入!
How can I prevent SQL injection in PHP?
session_id通常存储在cookie中。 或者 - 通过URL参数的旧方式。 您无需保护session_id。
阅读有关XSS / CSRF的建议。 加上令牌也很好。 也许这就是你对secure session_id的意思。
Stackoverflow:preventing csrf in php
OWASP:https://www.owasp.org/index.php/PHP_CSRF_Guard
OWASP:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet