如何以正确的方式使用$ _SESSION?

时间:2016-11-02 13:10:54

标签: php mysql session

目前我正在用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。

最好的方法是什么? 感谢。

2 个答案:

答案 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