网站登录/会话管理

时间:2017-09-08 10:57:01

标签: php mysql session

所以我一直在玩我的这个网站超过一年,但对会话管理的了解却很少。

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

但显然没有某种会话管理员登录也毫无价值。

前几天我有点想法,并绘制了一个关于我可以设置安全性的方法的漂亮流程图。

但是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);

用于调试我已经用$ sql替换了db中的预定义用户名,最终会有一个&#39; if generic user,做其他的&#39;。

sql doc乱七八糟,我在搜索谷歌后尝试了一些不同的变体,但常见的结果是“无法转换为字符串&#39;,未知索引,甚至尝试拉动数组不工作

mysqli_fetch
mysqli_store
misqli_use

所有返回&#39;预期1个peram找到0&#39; 当我使用结果var&#39;期望的peram是mysqli&#39; 我甚至采取了var的内容并将其用作peram,当我似乎得到未定义的索引时

function db_query($value){
    $connect = self::db_connect();
    $result = mysqli_query($connect,$value);

在此之后我无法获得任何工作。

我想要做的是从数据库中提取信息,例如用户的PID + SESID,因此我可以查询其他2个表以获取更多信息,例如上次已知的IP。

1 个答案:

答案 0 :(得分:0)

我不确定你的问题是什么。但是这里有一些例子如何在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;
    }
}
?>

现在,无论您何时需要连接到数据库,都可以包含以下文件:

 /* Include the Database-Connection */
include 'db-connect.php';

有了这个,您可以使用要发送到mysql-db的每个查询调用函数“query”:

/* 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中存储私有信息是一个漏洞:

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_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();
相关问题