【发布时间】:2013-02-03 14:26:46
【问题描述】:
我有一个网页和一个用于检查会话变量的 session_check 文件。我在需要的网页顶部添加了require 'session_check.php'。我还使用echo 来检查session_check.php 文件是否被调用。
我在 session_check.php 中有一个函数,它会在注销时被调用,但它永远不会被调用。你能帮帮我吗?谢谢:)
session_check.php的代码:
<?php
//Database Connection
$db_host = $_SERVER['DB_HOST'];
$db_uname = $_SERVER['DB_UNAME'];
$db_pwd = $_SERVER['DB_PWD'];
$db_name = $_SERVER['DB_DB'];
$db_link = mysql_connect($db_host,$db_uname,$db_pwd);
if(!$db_link){
die("Could Not Connect:".mysql_error($db_link));
}
mysql_select_db($db_name, $db_link) or die('Can\'t use db:'. mysql_error($db_link));
//Logout function
function user_logout($uname){
$query = "UPDATE user SET last_used_token='' WHERE username='$uname'";
mysql_close($db_link);
session_destroy();
header('Location:index.php');
exit();
}
//Getting session variables
session_start();
session_regenerate_id();
$cur_authkey = $_SESSION['authkey'];
$uname = $_SESSION['username'];
//Session data checking
$query = "SELECT last_used_token FROM user WHERE username='$uname'";
$result = mysql_query($query, $db_link) or die('Error while updating auth key <br /> Query:'.$query.'MySQL error no:'.mysql_errno().'<br /> MySQL error:'.mysql_error($db_link));
$row = mysql_fetch_assoc($result);
if($cur_authkey != $row['last_used_token']){
user_logout($uname);
}
?>
调用网页的部分代码
<?php
require 'session_check.php';
mysql_close($db_link);
?>
<!DOCTYPE html>
<html>.....</html>
【问题讨论】:
-
将session_start()设置为php代码的第一行
-
不相关,但您会受到 SQL 注入攻击,除非您对输入进行清理或参数化
-
@OneManCrew 那没用..
-
@Ozzy 你的意思是使用
mysql_escape_string($_SESSION['authkey']);? -
我的意思是您没有显示用于从用户那里获取 $uname 的代码,但是从您的代码中可以明显看出您没有使用准备好的语句。 net.tutsplus.com/tutorials/php/…
标签: php user-defined-functions