php的会话是如何工作的?它使用什么加密方法

时间:2011-02-03 21:23:05

标签: php session

这是我想知道的一个例子。

<?php
    session_start();
    $_SESSION['name'] = "mike";
    $_SESSION['lname'] = "donwell";
    $_SESSION['address'] = "111 north welding ave.";

    print $_SESSION['name'] . "<br/>";
    print $_SESSION['lname']. "<br/>";
    print $_SESSION['address']. "<br/>";

?>

当我在浏览器上运行并查看cookie时,我看到一个PHPSESSID cookie,其值始终是随机的。 它用于生成显示的值的加密方法。

出于安全考虑,我自己能够查看我网站上的会话及其价值吗?因为它总是加密?

感谢

3 个答案:

答案 0 :(得分:5)

默认情况下,会话未加密。数据只是以序列化形式存储在服务器硬盘上的临时目录中。这可以通过redefining session handling functions进行更改。

例如,您可以使用数据库存储会话数据,并加密它。

您看到的PHPSESSID值只是分配给当前浏览器会话的会话文件的MD5标识符。

答案 1 :(得分:0)

您的会话数据未加密。这个不祥的字符串只是随机散列的东西,可能是MD5哈希(参见MD5() - 函数),但它没有任何意义,也没有理由试图解密它。并且会话是私有的,所以没有人可以看到它,除了访问者和网站管理员。但是,如果有人通过网络嗅探或PC上的特洛伊木马进行会话密钥,那么他可以给你的安装程序设置进行身份验证......这就是所谓的会话劫持。

最佳

拉​​斐尔

答案 2 :(得分:0)

原始会话数据不公开。默认情况下,php会将会话数据写入doc root / htdocs之外的路径。会话保存路径可以在php.ini(session.save_path)中设置。用户只能访问与其会话ID相关联的会话数据(默认情况下,它存储在cookie中)。

我不相信php会在保存之前加密会话数据(它只是序列化的)。 IMO,您应该使用自定义会话处理程序。您可以更好地控制数据的存储位置,编码方式和访问方式(例如,通过cookie中的唯一ID)。许多框架包括一个自定义会话处理程序(Kohana 3有一个很好的;)。)。

使用自定义会话处理程序的文档:http://www.php.net/manual/en/function.session-set-save-handler.php

编辑:根据Mchl的评论更新