Php 网站登录/会话管理

Php 网站登录/会话管理,php,mysql,session,Php,Mysql,Session,所以我已经在我的这个网站上玩了一年多了,仍然对会话管理知之甚少 我有一个登录脚本的地方,但这是隐藏我,不是一个问题,虽然我找到它 但显然,如果没有某种会话管理器,登录是毫无价值的 前几天我有了一点想法,画了一个关于如何设置安全性的漂亮流程图 但是mysqli让我慢了下来 我想在cookie中存储一个用户名,这个值可以与数据库进行比较,找到最后使用的会话ID,然后将其与phpsesid cookie进行比较,最后将ID刷新为新的,并在db中替换,这意味着任何拥有过时会话令牌的人都必须重新登录,等等

所以我已经在我的这个网站上玩了一年多了,仍然对会话管理知之甚少

我有一个登录脚本的地方,但这是隐藏我,不是一个问题,虽然我找到它

但显然,如果没有某种会话管理器,登录是毫无价值的

前几天我有了一点想法,画了一个关于如何设置安全性的漂亮流程图

但是mysqli让我慢了下来

我想在cookie中存储一个用户名,这个值可以与数据库进行比较,找到最后使用的会话ID,然后将其与phpsesid cookie进行比较,最后将ID刷新为新的,并在db中替换,这意味着任何拥有过时会话令牌的人都必须重新登录,等等,对不起,我要开门见山了

因此,在构建新的会话管理器时,我在从mysql中提取数据时遇到了问题

if(isset($_COOKIE[$cookie_name])){
        require_once ("bin/sql.php");
        //plan to put another if statement here when the sql works
        $sql = "SELECT '$_COOKIE[$cookie_name]' FROM DB.TBL;";
        echo $sql . "<br>"; //debugging
        $uiddb = new sqlflow;
        $uiddb-> db_query($sql);
所有返回“应为1,但已找到0” 当我使用结果变量“expected peram to mysqli”时 我甚至将var的内容用作peram,这时我似乎得到了未定义的索引

function db_query($value){
    $connect = self::db_connect();
    $result = mysqli_query($connect,$value);
在这之后,我一直无法得到任何东西来工作


我试图做的是从数据库中提取信息,比如用户的PID+SESID,这样我就可以查询其他两个表,以获得更多信息,比如最后一个已知的IP。

我不确定您的问题出在哪里。但以下是一些如何在php中使用mysql连接的示例:

数据库

对于数据库连接,可以使用单个文件

/* db-connect.php */
<?php

# Neue Verbindung: Diese Variable kann global aufgerufen werden
$verbindung = new mysqli('db-server-adress', 'database-user', 'userpassword', 'database');

if($verbindung->connect_error)
{
    printf("Connect failed: %s\n", $verbindung->connect_error);
}

# Über diese Funktion können vereinfacht MySQL-Befehle abgesetzt werden
function query($sql)
{
    global $verbindung;

    if($result = $verbindung->query($sql)) 
    {
        return $result;
    } 
    else 
    {
        $verbindung->error;
    }
}
?>
使用此函数,您可以对要发送到mysql数据库的每个查询调用该函数查询:

/* with the function query() you can call any sql-statement and box the result to a variable */
$queryresult = query("SELECT iduser FROM tbluser WHERE username='testuser';");

/* num_rows is the numbers of rows that were found by your query: */
if($queryresult->num_rows != 0)
{
     /* Fetch each found row of the query */
     while($fetchedQuery = $queryresult->fetch_assoc())
     {
           /* Call a single attribute from the current fetched row */
           echo $fetchedQuery['iduser'];
     }
}
else
{
     echo 'no result';
}
饼干 我建议您首先将cookiename的结果放入框中。但请记住,在Cookie中存储privat信息是一个漏洞:

session_start();
$cookie_name = $_COOKIE[$cookie_name];

if(!empty($cookie_name))
{
     $resultcookie = query("SELECT iduser FROM tbluser WHERE  username='$cookie_name';");

     if($resultcookie->num_rows != 0)
     {
          $fetchedcookie = $resultcookie->fetch_assoc();
          /* Create a new session with the username in it */
          $_SESSION['user'] = $fetchedcookie;
     }
     else
     {
          echo 'Cookie not found';
          ////// More Code /////
     }
}
Session将功能Session_start放在每个文档的顶部:

<?php
session_start();

/* Check if the Session user exists with this client */
if(isset($_SESSION['user']))
{
      echo 'Session is set';
}
else
{
      echo 'session is not set';
}

/////////// Destroy a Session ///////////
session_destroy();

你知道,我以为我发送的查询出错了,但我没法用脑子思考。很好的回答,让我换一个,一旦我没有更多的选择,我会接受的questions@L.H.添加了一些会话管理。剩下的你得自己学习。你的函数中没有任何错误处理。错误总是会发生的。谢谢@Oliver,我在从查询函数返回可用响应时仍然有问题,但是错误并不存在,所以我必须继续挖掘自己并找到答案。但是非常有帮助,谢谢siri我到处都有错误处理,我总是从错误处理开始,然后构建脚本,这样如果有问题,我会得到一些东西,但显然我没有把我的全部代码放在这里。$sql=从DB.TBL;中选择“$\u COOKIE[$COOKIE\u name]”;;这个密码很危险。查看SQL注入漏洞,以及如何在PHP中生成准备好的语句。这是alpha,我正在努力使其工作,我稍后将安装real_escape以防止代码注入编辑,我已经有一个指定的函数在运行查询之前对输入进行转义,但我一步一步地执行。我与XAMPP合作,因此需要担心安全问题,而我是唯一拥有访问权限的人,这是一种危险的做法。第一次就把它做好,这样你就不会忘记修复它,也不会训练自己去区分安全性。感谢你的投入,我会考虑到这一点,现在当我甚至无法让函数工作时,就不需要添加更多干扰工作的内容,我有一个工作流程,每个部分,错误处理,然后是函数任务,然后安全,我不能忘记在这个例子中,因为安全是在流程图上,但你的正确的其他情况下,我可能会忘记,应该学会区分优先次序,你真的应该考虑使用一个框架,像Laravel。框架使编写此类代码变得容易——它们将具有内置的会话和数据库功能——并且它们使编写不安全的代码变得困难。
session_start();
$cookie_name = $_COOKIE[$cookie_name];

if(!empty($cookie_name))
{
     $resultcookie = query("SELECT iduser FROM tbluser WHERE  username='$cookie_name';");

     if($resultcookie->num_rows != 0)
     {
          $fetchedcookie = $resultcookie->fetch_assoc();
          /* Create a new session with the username in it */
          $_SESSION['user'] = $fetchedcookie;
     }
     else
     {
          echo 'Cookie not found';
          ////// More Code /////
     }
}
<?php
session_start();

/* Check if the Session user exists with this client */
if(isset($_SESSION['user']))
{
      echo 'Session is set';
}
else
{
      echo 'session is not set';
}

/////////// Destroy a Session ///////////
session_destroy();