Php 我是否正确使用会话?

Php 我是否正确使用会话?,php,session,Php,Session,我是否正确使用会话?还是这样做不好?是否有更好的方法使用会话来保护web应用程序 这是我的php代码 $conn = new PDO("mysql:host=$host;dbname=$dbname",$username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); $stmt = $conn->prepare("CALL sp_login(?,?)"); $stmt->bindPa

我是否正确使用会话?还是这样做不好?是否有更好的方法使用会话来保护web应用程序

这是我的php代码

$conn = new PDO("mysql:host=$host;dbname=$dbname",$username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    $stmt = $conn->prepare("CALL sp_login(?,?)");
    $stmt->bindParam(1, $_username, PDO::PARAM_STR, 30); 
    $stmt->bindParam(2, $_password, PDO::PARAM_STR, 30);
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if($row){
        $_SESSION['Login_username'] = $_username;
        header("location: index.php");
        exit;
    }
这是检查会话的代码

if(isset($_SESSION['Login_username'])) {

    return true;
}
else{
    header("location: login.php");
        exit;
}
我在某个地方读到,在数据库中保存会话是个好主意

我将把它保存到数据库中。我该怎么做? 成功登录后,是否要将会话插入数据库

我将如何使用数据库中保存的会话


有人说这种方式更好,也有人说那种方式更好。现在我很困惑

您需要在数据库中存储会话的唯一原因是您有多个服务器和跨服务器登录脚本或类似的东西

PHP将会话保存到文件中,您可以使用函数(或该页面上提到的设置)找到该目录

考虑到在使用
$\u session
之前总是调用
session\u start()
,因此您正确地使用了会话

只要把
$\u SESSION
想象成一个普通数组,PHP会自动为每个用户填充该数组。实际上,任何东西都可以应用于此,如
unset
isset

将会话保存到数据库也是可能的,因为许多框架都提供了这一点。他们中的一些人推出了自己的实现,只是为了更好地处理它,但有些人使用默认的PHP提供程序

正如Jay C的回答所提到的,当您有一个在多个节点上运行的分布式应用程序时,您可以将会话保存到数据库中。尽管这也可以使用共享文件系统来处理(只需在所有节点上共享所提到的路径)

无论如何,要了解如何实现自己的会话处理程序,请参阅

要查找php提供的默认处理程序,请在
phpinfo()
的输出中查找“已注册的保存处理程序”


若您刚刚听说将会话保存到数据库中是一个更好的主意,那个么您可能不需要它。相信我,将会话保存到数据库会带来很多问题,而这些问题在使用文件系统时是不会遇到的。数据库在负载下很难处理,在数据库中拥有会话可以很容易地使数据库处于负载下。除非你完全确定自己想要,否则不要这样做。

你一次问了太多不同的问题

我是否正确使用会话?

这样做不好?

有没有更好的方法使用会话来保护web应用程序?没有

我将把它保存到数据库中。我该怎么做?不管你怎么想

成功登录后,我想将会话插入数据库?

我将如何使用数据库中保存的会话?您可以使用$\u session和session\u start()完全按照您已经使用的方式使用它


如果要在数据库中存储会话,请参阅PHP文档中的“会话设置保存处理程序”和“会话句柄接口”。这些命令指示PHP如何加载和保存会话数据,它们与$\u会话变量的使用方式无关——这与会话数据的存储方式/位置无关。

我认为,您没有受到sql注入的保护。什么?im不受sql注入的保护?怎样请详细说明。或者指出代码。sql注入是可能的。感谢you@Přemyslťastný我在这里没有看到SQL注入。你能详细说明一下吗?我觉得很安全。非常感谢。因此,为了使我的web应用程序安全,需要集成代码。在这个例子中。我说得对吗?如何确保应用程序在sql注入中是安全的。我以为我用的是事先准备好的声明?