У меня есть этот код, который хранит сеансы внутри базы данных.
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'];
}
?>
База данных:
Выше один без процесса шифрования, в то время как последний с процессом шифрования. Как видно из рисунка, данные сеанса не совсем такие же, как раньше. Почему это происходит?
Прежде чем вы начнете писать криптографический код (например, шифрование), вы должны попытаться узнать о безопасности приложений:
Почему вы вообще шифруете свой идентификатор сеанса в базе данных? С кем вы его скрываете? Просто храните его оптом.
var1
перед расшифровкой session_id, и когда вы загружаете session_id в качестве текущего сеанса, var1 просто удаляет, потому что это не тот же сеанс. Но я просто предсказываю. Не могли бы вы поделиться своей полной базой кода, связанной с этим процессом. Не ясно.