加密解密会话

时间:2016-02-07 20:03:25

标签: php session encryption

我有这个代码,用于在数据库中存储会话。

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'];
  }
 ?>

数据库

上面一个是没有加密过程,而后一个是加密过程。从图中可以清楚地看到会话数据与之前不完全相同。为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

在您开始编写加密(即加密)代码之前,您应该尝试learn about application security

为什么要开始加密数据库中的会话ID?你是谁把它藏起来的?只需将其批发存放即可。