所以我一直在玩我的这个网站超过一年,但对会话管理的了解却很少。
我在某个地方有一个登录脚本,但这对我来说是隐藏的,虽然我找不到它但不是问题。
但显然没有某种会话管理员登录也毫无价值。
前几天我有点想法,并绘制了一个关于我可以设置安全性的方法的漂亮流程图。
但是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。
答案 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();