我有这个代码,用于在数据库中存储会话。
public function read($id)
{
// $id=rtrim(@mcrypt_decrypt(MCRYPT_BLOWFISH, 'qwerty', base64_decode($id), MCRYPT_MODE_CBC, md5(md5('protect me')) ),'\0');
$result = mysqli_query($this->link,"SELECT Session_Data FROM Session WHERE Session_Id = '".$id."' AND Session_Expires > '".date('Y-m-d H:i:s')."'");
if($row = mysqli_fetch_assoc($result)){
return $row['Session_Data'];
}else{
return "";
}
}
public function write($id, $data)
{
//$id=@base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, 'qwerty', $id, MCRYPT_MODE_CBC, md5(md5('protect me'))));
$DateTime = date('Y-m-d H:i:s');
$NewDateTime = date('Y-m-d H:i:s',strtotime($DateTime.' + 1 hour'));
$result = mysqli_query($this->link,"REPLACE INTO Session SET Session_Id = '".$id."', Session_Expires = '".$NewDateTime."', Session_Data = '".$data."'");
if($result){
return true;
}else{
return false;
}
}
在上面的代码中,我已经注释了加密和解密行,这些行实际上加密和解密 $ id ,然后存储在数据库中或从数据库中读取。
当我不进行加密和解密过程时,究竟会发生什么。会话完全按照预期工作,但如果我要执行此过程,则存储在内部的会话数据将被当前会话替换。
让我的问题更清晰
我有两个php文件
1) test1.php
<?php
require_once('inc.session.php');
session_start();
$_SESSION['var1'] = "My Portuguese text: SOU Gaucho!";
?>
2) test2.php
<?php
//page 2
require_once('inc.session.php');
session_start();
$_SESSION['wef']="abbaba";
if(isset($_SESSION['var1'])){
echo $_SESSION['var1'];
}
?>
数据库:
上面一个是没有加密过程,而后一个是加密过程。从图中可以清楚地看到会话数据与之前不完全相同。为什么会发生这种情况?
答案 0 :(得分:1)
在您开始编写加密(即加密)代码之前,您应该尝试learn about application security:
为什么要开始加密数据库中的会话ID?你是谁把它藏起来的?只需将其批发存放即可。