PHP面试题集锦,php中session机制的精解
分类:计算机编程

避防盗链:

1、$_GET,$_POST,$_REQUEST 三者的分裂

从二个简易的接头来看在PHP中$_GET $_POST $_REQUEST都以接纳多少了,get选取的是url参数而post能够说是由表单post过来的多寡,而request是能够接收两个的数据,这几个便是他们根基的界别所在了,下边一齐来拜望它们的差距申明。

PHP中有$_REQUEST与$_POST、$_GET用于选择表单数据。

一、$_REQUEST与$_POST、$_GET的分别和特性

$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]相当的慢。通过POST和GET方法提交的保有数据都得以经过$_REQUEST数组获得。

二、$_POST、$_GET的差距和特点

  1. GET是从服务器上获取数据,POST是向服务器传送数据。

2. GET是把参数数据队列加到提交表单的ACTION属性所指的ULX570L中,值和表单内挨门逐户字段一大器晚成对应,在U福特ExplorerL中能够看出。POST是由此HTTP POST机制,将表单内相继字段与其内容放置在HTML HEADE牧马人内一同传送到ACTION属性所指的ULANDL地址。顾客看不到那么些历程。

3. 对此GET情势提交表单数据,服务器端用$_GET[‘name’]获得变量的值,对于POST格局提交表单数据,服务器端用$_POST[‘name’]获取提交的数目,当然,两个都足以经过$_REQUEST[‘name’]拿到表单数据。对于REQUEST情势提交表单数据,服务器端用$_REQUEST[‘name’]获取变量的值,但这种方法比相当少用。

4. GET传送的数据量异常的小,不能够超出2KB。POST传送的数据量超大,平日被默以为不受约束。但辩白上,日常以为不能够超过100KB。

  1. GET安全性好低,POST安全性较高。

6. GET表单值能够因而_GET获取;但透过action的url设置的参数总是获取不到的,<form method="get" action="a.asp?b=b"></form>

跟<form method="get"action="a.asp"></form>是千篇少年老成律的,也正是说,在这里种气象下,GET方式会忽视action页前边边带的参数列表。POST表单值能够因而_POST获取;但由此action的url参数设置的参数则足以不能通过_POST获取到。action=test.php?id=1这种正是GET情势传值,能够用$_REQUEST和$_GET选择传值,但不可能用POST形式获取到值,纵然表单是POST方式提交。所在,在交付表单时,若是action中而且有参数,最佳只能通过POST表单方式,对于表单内数据,直接通过POST获取,对于action中参数,童工GET获取。

在做多少查询时,建议用GET情势,而在做多少增进、改进或删除时,提议用POST格局。

request是先读取 get再读post 的, 同有的时候候设有, 即覆盖掉前边的变量。

豆蔻年华、SQL注入攻击
攻击者把SQL命令插入到Web表单的输入域或页面央求的字符串,诈欺服务器实行恶意的SQL命令。
1.登入页面中输入的内容将直接用来组织动态的SQL命令,或许直接作为存款和储蓄进度的参数;
例如:
$query = 'SELECT * from Users WHERE login = ' . $username . ' AND password = ' . $password;
2.攻击者在客户名字和密码输入框中输入'或'1'='1之类的内容;
3.顾客输入的剧情提交给服务器之后,服务器运转方面包车型地铁代码布局出查询客商的SQL命令,但由于攻击者输入的内容极度出格,所以最终获得的SQL命令产生:
SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1';
4.是因为SQL命令实际5月被注入式攻击修正,已经不能够确实验证顾客身份,所以系统会错误地授权给攻击者。
风流浪漫旦攻击者知道应用会将表单中输入的内容一向用来表明身份的询问,他就能够尝试输入有些特殊的SQL字符串点窜查询退换其原先的机能,诈骗系统予以访谈权限。
系统蒙受区别,攻击者只怕引致的杀害也不一样,这关键由运用访谈数据库的辽源权限调控。如若客户的帐户具备管理员或其余相比较高级的权柄,攻击者就或许对数据库的表实践各个他想要做的操作,包涵丰盛、删除或更新数据,以至大概一直删除表
防备措施:
a.检查变量数据类型和格式

【补充】session_start(卡塔尔国要放在php最前方,header(卡塔尔(قطر‎函数也要放在session_start()之后。

规律:当服务器要大家下载文件的时候,大家会得到贰个链接,然后大家由此那些链接找到这几个文件,然后将它下载下来。那么相当于说那些链接一定要有些,那么哪些防止盗链呢?那正是给您的链接并非真的的公文链接了。那一点相当轻松想到,那么不给您确实的链接又如何让您下载文件呢?

2、$_SESSION,$_CEOKIE 两个的差距与关系

1、cookie数据贮存在顾客的浏览器上,session数据放在服务器上。

2、cookie不是很安全,外人能够剖判寄存在本地的总经理KIE并开展首席营业官KIE棍骗构思到安全应该使用session。

3、session会在断依时期内保存在服务器上。当访谈增添,会比较占用你服务器的天性思索到缓和服务器质量方面,应当选择CEOKIE。

4、单个cookie保存的数目不可能超过4K,非常多浏览器都约束一个站点最多保留二十个cookie。

cookie 和session 的联系:

session是透过cookie来工作的

session和cookie之间是经过$_COOKIE['PHPSESSID']来维系的,通过$_COOKIE['PHPSESSID']能够理解session的id,进而获取到其余的消息。

(int)、(string)

【读了上面包车型客车稿子转发的稿子后自身的明亮】:

咱俩在用php做网页的时候,总是会把php代码穿插在HTML代码中间,然后用php去生成剩下的代码,然后传给顾客端,约等于说客商端会接受到大家php脚本运转的结果。相当于说:即使小编的php脚本运转的结果正是你要下载的文件。那样我们就兑现了文本防盗链。就是说你能博取的链接便是这些php文件,然后再由那些百变php文件产生你想要的公文来供你下载。

3、include、require 有怎么着差别,include可以重新引进同一文件呢?

:include借使引入的文件不设有,试图继续往下实施,报八个warning

(假诺您不在乎早先的内容是或不是被含有,之后的剧情都要实践,就动用include卡塔尔(قطر‎

而require假设引进的文书荒诞不经,报fatal error,不再继续实施.

(借使从前的开始和结果自然要被含有,才允许继续实施之后的代码,就应用require卡塔尔国

b.过滤特殊符号

1,通过phpinfo(卡塔尔(英语:State of Qatar)函数能够查见到session.save_path的具体地方,即服务器session文件的存款和储蓄地点。

代码如下:

4.Include/require 与 include_once /require_once的区别

_once 会自动剖断文件是或不是业已引进,假如引进,不再另行实行.

即:保障被含有文件只大概被引进三回.

(假诺带有的公文里有定义函数,那么被含有的文件只可以被含有一遍,假诺频仍含有,就能够不能自已函数重定义的大谬不然,php是不运行函数重定义的,会现身致命错误,之后代码不在运转卡塔尔

=======================================================

意气风发部分文件分化意被含有数十三回?

可以用_once来控制,

只是,如若从文件的希图上,比较正式,能保障一定不会冒出反复包蕴的荒谬,

这种意况下 提议用include

因为include_once要检验早先有未有隐含,作用没有include高

htmlspecialchars();

2,php中当启用session_start(卡塔尔(英语:State of Qatar)之后会在服务器端session.save_path成立二个session文件。文件名蕴含(恐怕说就是卡塔尔国各类客商唯黄金年代的session_id,session中平等浏览器同一站点只好有叁个session_id,; 
   session数据从一个页面传递到另贰个页面,实际上传递的是二个名字叫phpsessid的cookie到服务器。
   服务器收到到这么些cookie之后就能够从[服务器上名字和cookie值相似的某部]session文件里读取相应内容。服务器是依附session_id来辨别客商端的,只若是sid相通就能够被以为是同贰个顾客端。

$FileAddress : 文件的相对路径。$DownloadName : 文件下载到客户端的名字。if(file_exists && $file=fopen { //首先要判断文件是否存在,如果文件跟本不存在的话,后边的代码也是白费。 Header('content-type:application/octet-stream'); //声明文件类型,这里是为了让客户端下载它,而不是打开它,所以声明为未知二进制文件。否则客户端会根据其文件类型在线打开它。 Header('content-Length:'.filesize; //声明文件的大小,告诉客户端这个文件的大小,否则客户端下载的时候看不到进度。 Header('content-disposition:attachment;filename='.$DownloadName); //声明文件名,这里就是告诉客户端它要下载的文件的名字,否则名字就会是你php文件的名字。 echo fread($file,filesize; //这里就是将加载的文件echo出来,因此这个php文件不能出现其他任何的文字,就是说这里若是出现了任何其他的输出的话都会输出到客户端下载的文件里。 fclose; //最后关闭句柄。}

5、写三个函数,呈现明天的年华 (年-月-日 时:分:秒)

$a = date("Y-m-d H:i:s", strtotime("-1 day"));

c.绑定变量,使用预处理语句

3,session安全部制防止的是未被授权的人对php文件(即某个网页页面卡塔尔(英语:State of Qatar)举办操作 大概 权限低的人想操作权限高的人的页面

上边这个代码就成功的尽责称职了防御盗链的天职,只需求定义那三个变量就足以。那四个变量可以由此GET来赢得,举个例子我们将文件实际链接与它的号子在数据库中做叁个炫丽,大家只供给GET到四个文本ID就能够对文件实行下载,保险了我们实在文件地方的平安。当然也得以是对文件真实链接进行加密之类的,简单的讲正是并不是讲切实地工作链接再放到客商端能够看出之处就好。

6、写三个函数,验证邮箱的格式是不是准确

function  checkEmail($email){

          $pregEmail="/([w-] @[w-] .[w-] )/";

          return    preg_match($pregEmail,$email);

}

$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
           ->bindValue(':id', $_GET['id'])
           ->bindValue(':status', 1)
           ->queryOne();

4,以下处境种种深入深入分析[双重读了贰遍,里面应该有不菲漏洞百出!17/12/9]

防止迅雷下载

7、有二个data.txt文件,风度翩翩行作为一条记下,请写一个函数,分页显示data.txt文件的剧情,每页10条记下。

二、跨网址脚本攻击(XSS卡塔尔
攻击者将恶意代码注入到网页上,其余客户在加载网页时就能实践代码,攻击者大概赢得满含但不限于越来越高的权杖(如实行一些操作)、私密网页内容、会话和cookie等种种内容。这一个恶意代码日常是JavaScript、HTML以致其余客商端脚本语言。

<?php
//1-----------------------
// 登录成功后
$_SESSION['user'] = 'someone';
//php处理文件
if ($_SESSION['user']) {
    echo '通过';
}
//对说明的说明:这些说明有很大问题,只是某种辅助理解的说明。。。。。
说明:这个最容易破解,破解者只需要session字段名'user',然后想办法在服务器端
   创建一个session文件,在此文件里写入user即可破解。不需要session_id(这里假设
     破解者拥有在服务器端创建属于他的伪造的session文件的本领[这个本领应该是及其困难的],
     否则他还是需要这个session_id的,下同)

//2-----------------------
//登录成功后
$_SESSION['user'] = 'someone';
$_SESSION['token'] = 'liverpool';
//php处理文件
if ($_SESSION['token'] == 'liverpool') {
    echo '通过';
}
说明:这个比1难一点,但和1基本差不多,破解者需要session字段'token'以及
   固定值liverpool,也不需要session_id;
//3-----------------------
//登录成功后
$_SESSION['user'] = 'someone';
$_SESSION['rand'] = rand(1111111,9999999);//这里还可以在用md5加密下,但破解实际难度都一样
$_SESSION['token'] = 'liverpool'.$_SESSION['rand'];
//php处理文件
if ($_SESSION['token'] == 'liverpool'.$_SESSION['rand']) {
    echo '通过';
}
说明:这个安全级别一般,因为每次session文件里的内容是变化的,所以破解者需要设法
    获取合法的session_id以伪装成合法用户。
//4-------------------------
//登录成功后
$_SESSION['user'] = 'someone';
$token = 'liverpool' . $_SERVER['HTTP_USER_AGENT'] . session_id();
$_SESSION['token'] = md5($token);
//php处理文件
if ($_SESSION['token'] == md5('liverpool' . $_SERVER['HTTP_USER_AGENT'] . session_id())) {
    echo '通过';
}
说明:这里同3里唯一的区别是在$_SERVER['HTTP_USER_AGENT'],其他的加密工作和3单独的一个随机数并无区别。
    这里破解者除了需要合法的session_id之外,还需要得到 和合法用户相同的USER_AGENT。这样安全等级就比3提了一级.

//5-------------------------
//登录成功后
$_SESSION['user'] = 'someone';
$token = 'liverpool' . $_SERVER['HTTP_USER_AGENT'].session_id();
$_SESSION['token'] = md5($token);
setcookie('token',$token);
//php处理文件
if ($_SESSION['token'] == $_COOKIE['token'])) {
    echo '通过';
}
说明:与4的区别在于4中if语句右边是php处理文件自动生成的,而在5这里if语句右边是从cookie里读取的(也可以通过存入数据库,
或者存入文件,和cookie效果一样),也就意味着破解者除了必须知道4中的2点之外,还需要传过去一个名为token的cookie。token的值比较复杂,增加了安全性。
但是理论上,如果破解者可以伪造服务器的session文件[很困难],那么对于5,他只要伪造一个名为token的session,然后再伪造一个
名为token的cookie,只要两者保持相等就可以了,这样反而绕开了session_id,http_user_agent.当然这只是理论上,实际5的安全性还是不错的。
结合4和5,可以写成更安全的6,如下

//6==================================
//登录成功后
$_SESSION['user'] = 'someone';
$rand = rand(100000000, 999999999) . time();
setcookie('rand', $rand);
$token = 'liverpool' . $_SERVER['HTTP_USER_AGENT'] . session_id();
$_SESSION['token'] = md5($token . $rand);
//php处理文件
$rand = $_COOKIE['rand'];
if ($_SESSION['token'] == md5('liverpool' . $_SERVER['HTTP_USER_AGENT'] . session_id() . $_COOKIE['rand'])){
    echo '通过';
}
说明:这样设计则破解者必须要同时伪造3个信息,名为phpsessid的cookie,user_agent头部,名为rand的cookie.缺一不可。如此安全性大增。
另外,这些设计都只是能区分出没有权限的用户或有权限的用户,但是无法区分出普通用户和管理员用户。但是区分普通用户和管理员用户的方法
很简单。可以在管理员登录成功后和普通用户区别开来做token,if(管理员){设置管理员的token}else{设置普通用户的token}代码如下,

//7==========================================
//登录成功后
if ('管理员') {
    $rand = rand(10000, 99999) . time();
    setcookie('adminrand', $rand);
    $token = 'liverpool' . $_SERVER['HTTP_USER_AGENT'] . session_id();
    $_SESSION['admintoken'] = md5($token . $rand);
} else {//普通权限用户登陆
    $rand = rand(1000000000000000, 9999999999999999) . time();
    setcookie('rand', $rand);
    $token = 'liverpool' . $_SERVER['HTTP_USER_AGENT'] . session_id();
    $_SESSION['token'] = md5($token . $rand);
}
//php处理文件
$rand = $_COOKIE['rand'];
$adminrand = $_COOKIE['adminrand'];
if ($_SESSION['token'] == md5('liverpool' . $_SERVER['HTTP_USER_AGENT'] . session_id() . $rand)) {
    echo '我是普通用户';
}else if($_SESSION['admintoken'] == md5('liverpool' . $_SERVER['HTTP_USER_AGENT'] . session_id() . $adminrand)){
    echo '我是管理员';
}else{
    echo '没有权限';
}
说明:这样就完美的把三类人区分开来了。普通用户想冒充管理员 和 没有权限的用户想冒充有权限的用户  都会需要3个信息,
   sessionid,user_agent,名叫rand(adminrand)的cookie。【要注意的是,有一种情况是在同一台电脑上同时登陆管理员账号
    和普通账号,这时管理员和普通人员的验证都会通过,会引起混乱。解决方法是在登录前清除掉session值;当然退出登录的
   时候也是要清除session的】


一篇很好的文章,仔细阅读受益匪浅

实在通过下面的代码,大家只可以做到链接的隐瞒,并无法防止顾客端用迅雷等工具对其进行下载。那么怎么样成功防止用迅雷等工具下载它呢?

8、写三个机动加载类

http://localhost/test.php?name=<script>alert(123456)</script>

正如本身此前所说我们得以经过种种门路来使php文件获得那几个文件的渠道,那么,大家只要不要将那么些消息加在链接里边就好了。比方:能够通过POST来传输文件的ID,能够经过session来传输文件的ID。

9、写叁个函数,显示当前目录下的文书及目录

function     my_scandir($dir)

{

             $files=array();

              if($handle= opendir($dir) ) {

                        while( ($file= readdir($handle)) !== false ) {

                                  if($file!=".."&&$file!=".") {

                                           if(is_dir($dir."/".$file) ) {

                                                   $files[$file] = scandir($dir."/".$file);

                                            }else{

                                                   $files[] =$file;

                                      }

                             }

                       }

                      closedir($handle);

                      return$files;

                }

}

以免措施:
应用htmlspecialchars函数将特殊字符转变来HTML编码,过滤输出的变量
三、Session固定攻击
1.攻击者访问网址http://www.example.com,获取她和睦的session id,如:SID=123;
2.攻击者给目的顾客发送链接,并带上自身的session id,如:http:///www.example.com/?SID=123;
3.目的客商点击了http:///www.example.com/?SID=123,像在那早先相似,输入本人的客户名、密码登陆到网址;
4.出于服务器的session id不变,今后攻击者点击http:///www.example.com/?SID=123,他就全数了目的顾客之处,可认为所欲为了。
防守措施:
1.时间限定修改session id

您不得不了解的Session的实质 - 51CTO.COM

有一些大家必须要认同,大许多web应用程序都离不开session的接纳。那篇文章将会构成php以致http合同来深入分析怎么样创设二个四平的对话管理机制。 大家先轻便的摸底一些http的学识,进而了然该合同的无状态本性。然后,学习一些有关cookie的基本操作。最终,作者会一步步论述怎么着运用部分简短, 高效的办法来拉长你的php应用程序的安全性以至稳固行。

自身想超过百分之五十的php初级技师一定会感觉php暗中认可的session机制的安全性 有如是有早晚保证的,事实赶巧相反 – php团队只是提供了风流浪漫套便捷的session的缓解方案提要求程序员使用,至于安全性的话,应该由程序员来提升,这是应用程序开采协会的职责。因为,这 里面包车型大巴章程超多,能够如此说呢,未有最棒,独有更加好。攻击的艺术在不断变动,防范方也亟需不停变招,所以,作者个人以为php共青团和少先队的做法依旧相比明智的。

无状态性

Http 是豆蔻梢头种无状态性的磋商。那是因为此种合同不必要浏览器在每一趟央浼中标记它本人的地点,并且浏览器以至服务器之间并未保持贰个持久性的连年用于多少个页面之 间的拜会。当二个客商采访一个站点的时候,顾客的浏览器发送叁个http央浼到服务器,服务器重回给浏览器三个http响应。其实很简短的二个定义,客商端一个伸手,服务器端贰个回复,那就是全部基于http公约的报道进度。

因为web应用程序是依据http契约进行广播发表的,而大家已经讲过 了http是无状态的,这就大增了保卫安全web应用程序状态的难度, 对于开荒者来讲,是一个异常的大的挑战。Cookies是作为http的二个扩展诞生的,其主要用项是弥补http的无状态个性,提供了生龙活虎种保持客商端与劳动 器端之间状态的门路,不过由于出于安全性的设想,有的顾客在浏览器中是明确命令防止掉cookie的。这种景况下,状态消息只可以通过url中的参数来传递到服务器 端,但是这种艺术的安全性非常差。事实上,依照平时的主见,应该有客户带给申明自身的地位,进而和服务器之间维持生机勃勃种意况,可是出于安全性方面包车型大巴思考,大家都应该明了某个 – 来自顾客端的音信都以不能够一心相信的。

固然那样,针对维持web应用程序状态的主题材料,相对来讲,照旧有相比较文雅的应用方案的。不过,应该算得未有两全的缓慢解决方案的,再好的建设方案也不只怕适用全部的情事。那篇随笔将介绍部分手艺。那么些本领能够用来比较稳固地保持应用程 序的情况以致抵御一些针对session的攻击,比如会话勒迫。并且你能够学学到cookie是怎么工作的,php 的session做了那二个事情,以致怎么样手艺威胁session。

HTTP 概览

怎么着本领保持web应用程序的景况甚至选取最合适的解决方案吗?在答应那几个标题早前,必需得先领悟web的平底公约– Hypertext Transfer Protocol (HTTP卡塔尔(قطر‎。

当客户访谈

GET / HTTP/1.1

Host: example.org

以上第风度翩翩行称为乞请行,第贰个参数(一个反斜线在此个例子中卡塔尔国表示所央求能源的门道。反斜线代表了根目录;服务器会调换那些根目录为服务器文件系统中的一个有声有色目录。

Apache 的客户常用DocumentRoot那么些命令来安装这些文书档案根路线。如若需要的url是 /script.php,那么哀告的不二等秘书技正是/path/to/script.php。倘使document root 被定义为usr/lcoal/apache/htdocs的话,整个央浼的财富路线正是/usr/local/apache/htdocs/path /to/script.php。

其次行描述的是http底部的语法。在这里个事例中的底部是Host, 它标记了浏览器希望得到财富的域名主机。还应该有不菲其余的央浼底部可以蕴含在http央求中,例如user-Agent底部,在php能够通 过$_SERVER['HTTP_USER_AGENT']得到央浼中所指点的这几个底部音讯。

唯独缺憾的是,在此个诉求例子中,未有其它新闻能够唯风流倜傥标记当前以此发出央求的客户端。有个别开采者依靠央浼中的ip底部来唯一标志发出本次央浼的客户端,可是这种方法存在重重主题素材。因为,有些客户是 通过代理来拜谒的,举例客户A通过代理B连接网址www.example.com, 服务器端获取的ip新闻是代理B分配给A的ip地址,尽管顾客这时候断开代理,然后再度连接代理的话,它的代办ip地址又重新改正,也就说三个客户对应了八个ip地址,这种情形下,服务器端依据ip地址来标记客户来说,会感觉诉求是缘于不相同的顾客,事实上是同一个顾客。 还用其余后生可畏种情形正是,譬喻相当多客商是在同壹个局域网里通过路由三回九转网络,然后都访谈www.example.com的话,由于那一个顾客共享同三个外网 ip地址,这会引致服务器以为那些客户是同一个客户产生的诉求,因为他俩是来自同四个ip地址的拜望。

保持应用程序状态的率先步就是要清楚如何来唯风姿洒脱地方统一标准识每一个顾客端。因为独有在http中倡议中带走的音信本领用来标记顾客端,所以在倡议中必得带有某种可以用来标记顾客端独一身份的音信。Cookie设计出来正是用来解决那风流倜傥主题素材的。

Cookies

假设你把Cookies看成为http合同的叁个恢宏的话,通晓起来就便于的多了,其实本质上cookies正是http的二个扩充。有八个http底部是 专责安装以至发送cookie的,它们分别是Set-Cookie以至Cookie。当服务器重回给客户端二个http响应消息时,在那之中若是带有 Set-Cookie这么些底部时,意思正是提醒客商端建设构造三个cookie,并且在世袭的http必要中活动发送那些cookie到劳动器端,直到这几个cookie过期。假诺cookie的生活时间是整整会话时期的话,那么浏览器会将cookie保存在内存中,浏览器关闭时就能够自行消逝那么些cookie。此外风姿洒脱种情况即便保存在顾客端的硬盘中,浏览器关闭的话,该cookie也不会被消除,后一次开发浏览器访谈对应网址时,那个cookie就能够自动重新发送到服务器端。叁个cookie的装置以致发送过程分成以下四步:

客商端发送贰个http须求到劳动器端

劳务器端发送一个http响应到客商端,当中蕴藏Set-Cookie底部

顾客端发送三个http伏乞到劳动器端,此中包涵Cookie底部

劳动器端发送二个http响应到客商端

其一报纸发表进程也可以用于下下暗暗提示图来叙述:

图片 1

在 客商端的第三次倡议中带有的Cookie尾部中,提供给了服务器端能够用来唯生机勃勃标志顾客端身份的音信。这时候,服务器端也就足以判明客商端是否启用了 cookies。尽管,客户大概在和应用程序人机联作的长河中忽然禁止使用cookies的运用,不过,那么些景况基本是不太或然发生的,所以可以不加以思索,那在 试行中也被认证是对的。

GET and POST Data

除开cookies,客商端还足以将发送给服务器的数额包涵在伸手的url中,比方须要的参数大概央求的不二等秘书籍中。 大家来看几个例子:

GET /index.php?foo=bar HTTP/1.1

Host: example.org

以 上就是四个正规的http get 恳求,该get伏乞发送到example.org域名对应的web 服务器下的index.php脚本, 在index.php脚本中,可以透过$_GET['foo']来获取相应的url中foo参数的值,也便是’bar’。大好多php开荒者都称那样的数 据会GET数据,也某个称它为查询数据可能url变量。但是大家必要注意一点,不是说GET数据就只能分包在HTTP GET类型的伸手中,在HTTP POST类型的伸手中意气风发律能够满含GET数据,只要将有关GET数据包罗在哀求的url中就可以,也正是说GET数据的传递不注重与现实央求的品类。

别的意气风发种顾客端传递数据到劳动器端的不二诀假如将数据满含在http诉求的内容区域内。 这种方法索要央浼的体系是POST的,看上面一个例证:

POST /index.php HTTP/1.1

Host: example.org

Content-Type: application/x-www-form-urlencoded

Content-Length: 7

foo=bar

在此种情形下,在脚本index.php能够透过调用$_POST['foo']来得到相应的值bar。开垦者称这么些数额为POST数据,约等于贵胄纯熟的form以post形式提交央浼的不二秘籍。

在二个呼吁中,可以同期包括那三种情势的数据:

POST /index.php?myget=foo HTTP/1.1

Host: example.orgContent-Type: application/x-www-form-urlencoded

Content-Length: 11

mypost=bar

这三种传递数据的措施,比起用cookies来传递数据更稳固,因为cookie只怕被禁止使用,不过以GET甚至POST形式传递数据时,荒诞不经此种情况。大家能够将PHPSESSID包涵在http央求的url中,就好像下边包车型地铁例证同样:

GET /index.php?PHPSESSID=12345 HTTP/1.1

Host: example.org

以 这种方式传送session id的话,能够跟用cookie头部传递session id同样,达到同等的职能, 不过,缺点正是索要开拓者认为地将session id附加在url中要么作为掩没字段步入到表单中。不像cookie同样,只要劳动器端提醒顾客端创设cookie成功之后,客商端在后续的需要中,会自 动第将对应的从未有过过期的cookie传递给劳务器端。当然,php在拉开session.use_trans_sid后,也足以自行地将session id 附加在url中甚至表单的隐蔽字段中,可是那些选项不建议拉开,因为存在安全主题素材。这样的话,轻松走漏session id, 举个例子有的客户会bookmark一个url可能分享三个url,那么session id也就展露了,参与这么些session id还尚无过期,那是有必然的景德镇难点存在的,除非服务器端,除了session id外,还叠合了其余措施开展表达顾客的合法性!

固然以POST的点子来传递session id的话,相对GET的主意来讲,会安全的多。不过,这种办法的久治不愈的病魔正是相比劳苦,因为那样的话,在您的应用程序中相比将持有的央浼都调换到post的呼吁,这眼看是不太对劲的。

Session的管理

直 到即日,作者只谈谈了何等保证应用程序的意况,只是简短地提到到了后生可畏旦维持诉求之间的涉及。接下来,小编解说下在实际中用到很多的技巧– Session的治本。涉及到session的军事拘押,就不是单独地涵养各种恳求之间的意况,还必要保持会话时期针对种种特定顾客使用到的数码。大家通常把 这种数据叫做session数据,因为那几个数量是跟有些特定客商与服务器之间的对话相关联的。倘使您利用php内置的session的管理机制,那么 session数据貌似是保存在/tmp这些服务器端的文书夹中,况兼此中的session数据会被机关地保存到一流数组$_SESSION中。三个最轻松的应用session的例证,便是将有关的session数据从叁个页面传递(留心:实际传递的是session id卡塔尔到另三个页面。下边用示例代码1, start.php, 对这一个例子加以演示:

  1. <?php 
  2. session_start(); 
  3. $_SESSION['foo'] = 'bar'; 
  4. ?> 
  5. <a href="continue.php">continue.php</a> 

要是顾客点击start.php中的链接访问continue.php,那么在continue.php中就足以经过$_SESSION['foo']拿到在start.php中的定义的值’bar’。看下边的身体力行代码2:

演示代码2 – continue.php

  1. <?php 
  2. session_start(); 
  3. echo $_SESSION['foo'];  
  4. ?> 

是还是不是特轻便,不过作者要提出的话,假诺您真正这么来写代码的话,表达你对php底层的对于session的落到实处机制还不是优秀精晓通透到底。在不打听php内 部给您活动做了某一件事情的意况下,你会发现只要程序出错的话,那样的代码将变的很难调节和测量试验,事实上,那样的代码也完全未有安全性可言。

Session的安全性难点

长久以来相当多开荒者都是为php内置的session管理机制是兼顾自然的安全性,能够对平时的session攻击起到防守。事实上,那是生机勃勃种误解,php 团队只兑现了风流倜傥种便利有效的建制。具体的平安措施,应该有应用程序的付出公司来推行。 就好像开篇聊起的,未有最棒的解决方案,只有最合适你的方案。

今昔,大家来看下一个比较正常的照准session的攻击:

客户访谈

example.org的服务器设置提示顾客端设置相关cookie – PHPSESSID=12345

攻击者这时候访谈 – PHPSESSID=12345

这么境况下,因为example.orge的服务器通过PHPSESSID来辨别对应的客商的,所以服务器错把攻击者当成了合法的客户。

全总进度的汇报,请看下边包车型客车示例图:

图片 2

当然这种攻击的艺术,前提条件是攻击者必得透过某种手段固定,威迫可能推测出有些合法顾客的PHPSESSID。纵然那看起来难度极高,不过亦非不恐怕的事情。

安全性的巩固

有好多本领能够用来拉长Session的安全性,重要考虑就是要使验证的进程对于合法客商来讲,越简单越好,然后对于攻击者来讲,步骤要越复杂越好。当然,那不啻是比较难于平衡的,要借助你应用程序的切实可行安插来做决策。

最简易的处于HTTP/1.1伏乞包蕴央求行以至一些Host的尾部:

GET / HTTP/1.1

Host: example.org

假若客商端通过PHPSESSID传递相关的session标记符,能够将PHPSESSID放在cookie底部中展开传递:

GET / HTTP/1.1

Host: example.org

Cookie: PHPSESSID=12345

相似地,客商端也能够将session标记符放在诉求的url中开展传递。

GET /?PHPSESSID=12345

HTTP/1.1Host: example.org

自然,session标记符也足以饱含在POST数据中,但是那对顾客体验有震慑,所以这种艺术超少使用。

因 为来源TCP/IP音信也不自然可以完全信任的,所以,对于web开垦者来讲,利用TCP/IP中的消息来提升安全性也是不太对劲的。 但是,攻击者也不得不提供三个法定顾客的唯后生可畏的标志符,技能假扮成合法客商进入系统。由此,看起来唯意气风发能够有效的保障系统的法子,正是尽可能地蒙蔽session标记符只怕使之难于猜想出来。最棒正是多头都能试行。

PHP会自动生成一个随意的session ID,基本来讲是不大概被猜度出来的,所以那上头的黑河仍有断定保证的。但是,要防御攻击者获取一个法定的session ID是一定困难的,那差不离不是开采者所能调整的。

事 实上,非常多动静下都有非常大大概引致session ID的透漏。 譬如说,若是经过GET数据来传递session ID的话,就有希望揭露这些敏感的身价信息。因为,有的客商恐怕会将满含session ID的链接缓存,收藏依旧发送在邮件内容中。Cookies是生机勃勃种像相对来讲安全一点的建制,但是顾客是能够在客户端中禁绝掉cookies的!在一些 IE的版本中也许有比较严重的安全漏洞,相比较有名的就是会漏风cookies给风流倜傥部分有安全隐患的邪恶站点。

据此,作为二个开荒者,能够一定session ID是不能够被疑惑出来的,然则还是有十分的大只怕被攻击者使用一些方法取得到。所以,必需接纳一些额外的平安措施来防范此类意况在你的应用程序中发出。

事实上,一个专门的学业的HTTP央求中除去Host等必得带有的头顶,还包含了部分可选的头部.举七个例证,看上边包车型地铁二个央浼:

GET / HTTP/1.1

Host: example.org

Cookie: PHPSESSID=12345

User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

Accept: text/html;q=0.9, */*;q=0.1

Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66

Accept-Language: en

本大家能够看出,在上述的三个必要例子中蕴藏了八个附加的头顶,分别是User-Agent, Accept, Accept-Charset以致Accept-Language。因为这么些尾部不是必需的,所以完全依赖他们在你的应用程序中发挥作用是不太明智的。可是,要是多个客户的浏览器确实发送了那几个底部到服务器,那么能够无可否认的是在接下去的同一个客户通过同二个浏览器发送的乞请中,必然也会引导那么些底部。当 然,那之中也许有极个其余独特别情报况爆发。假设以上例子是由一个脚下的跟服务器创设了对话的顾客发生的央浼,思谋上面包车型客车七个伸手:

GET / HTTP/1.1

Host: example.org

Cookie: PHPSESSID=12345

User-Agent: Mozilla/5.0

因为有同等的session id蕴含在呼吁的Cookie底部中,所以生龙活虎律的php session将会被访谈到。可是,供给里的User-Agent尾部跟以前的央求中的音信是分裂的,系统是不是足以假如那五个须求是同八个顾客发生的?

像这种景况下,发掘浏览器的头顶改动了,但是无法自然那是或不是是三次来自攻击者的央求的话,比较好的点子便是弹出一个渴求输入密码的输入框让客商输入,那样的话,对顾客体验的影响不会超级大,又能很有效地防备攻击。

自然,你能够在系统中进入核查User-Agent尾部的代码,相近示例3中的代码:

示范代码3

  1. <?php  
  2. session_start();  
  3. if (md5($_SERVER['HTTP_USER_AGENT']) != $_SESSION['HTTP_USER_AGENT'])  
  4. {    exit; 
  5. }  
  6. ?> 

当然,你先必得在首先次倡议时,伊始化session的时候,用MD5算法加密user agent消息同不常候保留在session中,肖似下边示例4中的代码:

演示代码4

  1. <?php  
  2. session_start();  
  3. $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);  
  4. ?> 

虽然不自然必要用MD5来加密那些User-Agent音讯,但使用这种方式将来就无需再过滤那个$_SERVER['HTTP_USER_AGENT']数码了。不然的话,在动用这些数额早先必定要拓宽数据过滤,因为别的来自顾客端的数量都以不可相信赖的,一定要在乎这点。

在你检查这几个User-Agent客商端底部音讯之后,做为三个攻击者应当要到位两步技巧威吓三个session:

获得一个合法的session id

含有四个相通的User-Agent底部在冒充的央求中

您只怕会说,居然攻击者能得到平价的session id,那么以他的等级次序,伪造叁个同等的User-Agent不是件难事。不错,但是我们得以说那足足给他加多了部分劳神,在必然水平上也增添了session机制的安全性。

你 应该也能想到了,既然大家得以检查User-Agent那几个底部来增加安全性,那么无妨再采用其余的片段头顶消息,把她们组合起来生成三个加密的 token,何况让顾客端在世袭的央浼中带走那一个token!那样的话,攻击者基本上不或许估计出那样贰个token是怎么变卦出来的。那好比你用银行卡在超级市场付款,多个您必须要有银行卡(好比session id卡塔尔,其它你也必需输入二个付出密码(好比token卡塔尔国,那有这两侧都符合的情况下,你才具幸不辱命进去账号付款。 看上面风度翩翩段代码:

  1. <?php  
  2. session_start();  
  3. $token = 'SHIFLETT' . $_SERVER['HTTP_USER_AGENT']; 
  4. $_SESSION['token'] = md5($token . session_id());  
  5. ?> 
  6. 只顾:Accept这些底部不应该被用来生成token,因为有一点浏览器会自行退换这几个尾部,当客商刷新浏览器的时候。 

在你的认证机制中投入了那一个极其难于预计出来的token未来,安全性会拿到极大的晋级。要是这几个token通过像session id相像的办法来拓展传递,这种景况下,贰个攻击者必需实现供给的3步来要挟顾客的session:

拿到二个法定的session ID

在乞请中插足相仿的User-Agent尾部,用与生成token

在伸手中指导被攻击者的token

那 里面有个难题。借使session id以致token都以因此GET数据来传递来讲,那么对于能赢得session ID的攻击者,相像就可以知道获得到这么些token。所以,比较安全可信的法子应该是接纳三种分歧的数额传递方式来分别传递session id以至token。举个例子,通过cookie来传递session id,然后经过GET数据来传递token。因而,要是攻击者通过某种手腕获取了这么些唯意气风发的客商身份标识,也是不太恐怕同一时候轻松地获取到那个token, 它相对来讲仍是平安的。

还会有大多的能力花招能够用来增长你的session机制的安全性。希望您在差非常少通晓session的里边本质未来,能够安顿出相符您的采用类别的认证机制,进而大大的进步系统的安全性。毕竟,你是最熟谙当下你付出的体系的开拓者之一,能够依据实况来实香港行政局地特 有的,额外的平安措施。

总结

上述只是约莫地陈述了session的办事机制,以至简单地演讲了一些完好无损措施。但要记住,以上的方式都以能力所能达到抓好安全性,不是说可以完全维护你的系统,希望读者自身再去实验探究相关内容。在这里个科学切磋进度中,相信你会学到很有实际接收价值的方案。

原稿地址:

 

 

 

那就是作者所说的:花式授权下载。

10、这是叁个标准UTucsonL (

session_regenerate_id(TRUE);//删除旧的session文件,每次都会产生一个新的session id。默认false,保留旧的session

1.大家能够在下载的领路页写入客商端session,来储存其授权码,将文件ID也蕴藏进去,然后再在下载的php里参与验证session的代码,这样就算客商端将连接输入迅雷下载也是不曾用的。

11、mysql数据库中,innodb 和 myisam 差别(只少5点)

1、 存款和储蓄布局

MyISAM:各个MyISAM在磁盘上囤积成多少个文件。第叁个文本的名字以表的名字起始,增加名提议文件类型。.frm文件存款和储蓄表定义。数据文件的扩张名称叫.MYD (MYData卡塔尔。索引文件的扩大名是.MYI (MYIndex卡塔尔国。

InnoDB:全体的表都保存在同四个数据文件中(也恐怕是三个文件,恐怕是独立的表空间文件),InnoDB表的轻重缓急只受限于操作系统文件的大大小小,常常为2GB。

2、 存款和储蓄空间

MyISAM:可被减去,存款和储蓄空间超级小。协理二种不一致的蕴藏格式:静态表(暗中认可,但是注意数据最后不能够有空格,会被去掉卡塔尔(قطر‎、动态表、压缩表。

InnoDB:要求更加多的内部存款和储蓄器和仓库储存,它会在主内部存款和储蓄器中建构其专项使用的缓冲池用于高速缓冲数据和目录。

3、 事务协助

MyISAM:强调的是性质,每趟查询全数原子性,其施行数度比InnoDB类型更加快,不过不提供业务帮忙。

InnoDB:提供业务帮助工作,外界键等高级数据库成效。 具有事务(commit卡塔尔(英语:State of Qatar)、回滚(rollback卡塔尔(قطر‎和崩溃修复本领(crash recovery capabilities卡塔尔(英语:State of Qatar)的政工安全(transaction-safe (ACID compliant卡塔尔(قطر‎卡塔尔国型表。

4、 CURD操作

MyISAM:固然实践大气的SELECT,MyISAM是更加好的选择。(因为从没扶助行级锁卡塔尔国,在增加和删除的时候要求锁定任何表格,效能会低一些。相关的是innodb协助行级锁,删除插入的时候只须要锁定改行就能够,作用较高

InnoDB:倘诺您的数码实施大气的INSERT或UPDATE,出于品质方面包车型地铁伪造,应该运用InnoDB表。DELETE 从品质上InnoDB更优,但DELETE FROM table时,InnoDB不会再度创立表,而是后生可畏行风华正茂行的去除,在innodb上风流倜傥旦要清空保存有大气数码的表,最棒使用truncate table那个命令。

5、 外键

MyISAM:不支持

InnoDB:支持

2.更改session的名称

2.我们能够在下载的辅导页加入二个隐身的表单,用POST提交给达成下载效率的php,那样也能落得幸免第三方下载工具下载的目的。

12、有一张商酌表comment(uid 客户ID,post_id 评论ID,article_id 小说ID),请写一条sql语句询问出提交批评最多的3个顾客id

select  user_id ,count(post_id) as sum_post  from comment  group by user_id  order by sum_post  desc

session的默认名称是PHPSESSID,此变量会保存在cookie中,如果攻击者不抓包分析,就不能猜到这个名称,阻挡部分攻击
session_name("mysessionid");

显而易见那样的办法相当多,上边二种形式提供参谋,首要的思路就是就要下载文件的音讯和链接分开来,那样就足以完毕只凭二个链接无法下载文件的目的。

13、怎么解决ajax跨域央求

1、允许单个域名访谈

2、允许多少个域名访谈

3、允许全部域名访问

3.关门透明化session id

如上正是本文的全体内容,希望对大家的上学抱有利于,也可望大家多多点拨脚本之家。

14、请讲下你对MVC的精晓

透明化session id指当浏览器中的http请求没有使用cookie来制定session id时,sessioin id使用链接来传递
int_set("session.use_trans_sid", 0);

15、要完成四个在线倒计时抢购功用,须求小心哪些难题?怎么解决那些主题素材?

4.只从cookie检查session id

16、请讲下你对高并发大访问量的网址应用方案

率先,确认服务器硬件是或不是充足扶助当前的流量。

习感到常的P4服务器日常最多能扶助每一天10万独门IP,借使访谈量比那些还要大,那么必得首先配置豆蔻梢头台越来越高品质的专用服务器技术一挥而就难题,不然怎么优化都不容许深透搞定品质难题。

援助,优化数据库访问。

前台完成完全的静态化当然最棒,能够完全不用访谈数据库,可是对于频仍更新的网站,静态化往往不能够满意有个别职能。

缓存能力便是另二个缓和方案,正是将动态数据存款和储蓄到缓存文件中,动态网页直接调用那么些文件,而不要再拜会数据库,WordPress和Z-Blog都大方利用这种缓存技巧。

借使的确无法幸免对数据库的拜见,那么能够品尝优化数据库的查询SQL.幸免使用Select * from那样的言语,每一回查询只回去自个儿索要的结果,防止长时间内的大,尽量做到"所查即所得" ,固守以小表为主,附表为辅,查询条件先索引,先小后大的基准,升高查询成效.

其三,禁止外界的盗链。

外表网址的图片恐怕文件盗链往往会带给大气的载重压力,因而应该严俊限定外界对于自己的图样恐怕文件盗链,幸亏时下能够省略地由此refer来调节盗链,Apache自身就足以由此陈设来制止盗链,IIS也可以有生机勃勃对第三方的ISAPI能够完毕均等的效果。当然,杜撰refer也足以经过代码来完成盗链,可是当下有意假造refer盗链的还少之又少,能够先不去考虑,或许应用非手艺花招来缓和,例如在图片上平添水印。

第四,调控大文件的下载。

大文件的下载会占用相当的大的流量,而且对于非SCSI硬盘来讲,大批量文件下载会消耗CPU,使得网址响应才干下落。因而,尽量不要提供超过2M的大文件下载,假诺急需提供,提出将大文件放在其余生龙活虎台服务器上。

第五,使用差异主机分流首要流量

将文件放在差异的主机上,提供差别的镜像供客户下载。比方假若感觉宝马X5SS文件占用流量大,那么使用FeedBurner或许FeedSky等服务将HighlanderSS输出放在其余主机上,那样外人访问的流量压力就多数聚集在FeedBurner的主机上,SportageSS就不占用太多能源了。

int_set("session.use_cookies", 1);//表示使用cookies存放session id
int_set("session.use_only_cookies", 1);//表示只使用cookies存放session id

17.您用什么样办法检查 PHP 脚本的执行功效(日常是本子实践时间)和数据库 SQL 的效能(经常是数据库 Query 时间), 并定位和解析脚本推行和数据库查询的瓶颈所在?

1.PHP实践时间:  

$begin=microtime(true卡塔尔(قطر‎; //获取程序开头施行的年月 

// some code here 待实践的代码

 $stop=microtime(true卡塔尔(قطر‎; //获取程序施行结束的日子 

list($m0,$s0)=explode(" ",$begin);

 list($m1,$s1)=explode(" ",$stop);

 $runtime=($s1 $m1-$s0-$m0)*1000; 

echo    ‘当前剧本实行时间:’.$etime-$stime.'阿秒';

 2.SQL试行时间(其实和方面同样卡塔尔(英语:State of Qatar):  

$begin=microtime();

 mysql_query($sql);

 $stop=microtime(); 

list($m0,$s0)=explode(" ",$begin);

 list($m1,$s1)=explode(" ",$stop); 

$runtime=round(($s1 $m1-$s0-$m0)*1000,4); 

echo '当前剧本施行时间:'.$runtime.'ms';

5.行使U福睿斯L传递掩没参数

$sid = md5(uniqid(rand()), TRUE));
$_SESSION["sid"] = $sid;//攻击者虽然能获取session数据,但是无法得知$sid的值,只要检查sid的值,就可以确认当前页面是否是web程序自己调用的

四、Session威逼攻击
攻击者利用各类招数来博取目的客商的session id。后生可畏旦拿到到session id,那么攻击者能够使用对象客商的地位来报到网址,获取指标客商的操作权限。
攻击者获取目的顾客session id的点子:
1.暴力破解:尝试种种session id,直到破解截至;
2.划算:假如session id使用非随机的不二秘籍发出,那么就有一点都不小希望总结出来;
3.窃取:使用互联网截获,xss攻击等情势获得
幸免方法:
1.年限校订session id
2.更改session的名称
3.关闭透明化session id
4.设置HttpOnly。通过设置Cookie的HttpOnly为true,能够免卫顾客端脚本访问那一个Cookie,从而使得的严防XSS攻击。
五、跨网址供给假造攻击(CS昂科拉F卡塔尔
攻击者杜撰目的客商的HTTP乞求,然后此恳请发送到有CSSportageF漏洞的网址,网站实行此呼吁后,引发跨站央求杜撰攻击。攻击者利用隐藏的HTTP连接,让对象客商在不理会的场地下单击这么些链接,由于是顾客自身点击的,而她又是法定客商全体合法权力,所以目的客户能够在网址内进行一定的HTTP链接,进而完毕攻击者的指标。
它与XSS的笔伐口诛格局分歧,XSS利用漏洞影响站点内的顾客,攻击对象是同一站点内的客商者,而CS纳瓦拉F 通过伪装成受害客商发送恶意诉求来影响Web系统中受害顾客的好处。
例如:
有个别购物网址购得商品时,采纳http://www.shop.com/buy.php?item=watch&num=100,item参数分明要购置什么货品,num参数明确要购销数量,假使攻击者以逃匿的点子发送给指标顾客链接
,那么生机勃勃旦指标客户十分大心访谈之后,购买的数量就成了九二十个
防护方法:
1、检查网页的来自
2、检查内置的藏匿变量
3、使用POST,不要采用GET,管理变量也决不一向动用$_REQUEST
六、文件上传漏洞攻击
攻击者利用程序短处绕过系统对文件的认证与拍卖政策将恶意代码上传到服务器并赢得实践服务器端命令的力量。
常用的攻击花招有:
上传Web脚本代码,Web容器解释实行上传的黑心脚本;
上传Flash跨域战略文件crossdomain.xml,更正访问权限(其余计谋文件利用格局挨近卡塔尔(英语:State of Qatar);
上传病毒、木Marvin件,诱骗客商和大班下载试行;
上传包蕴脚本的图样,某个浏览器的低档版本会实施该脚本,用于钓鱼和欺骗。
卫戍方法:
1.文书上传的目录设置为不可实践;
2.剖断文件类型,设置白名单。对于图片的处理,能够接纳压缩函数或许resize函数,在拍卖图片的同有的时候候破坏图片中恐怕含有的HTML代码;
3.使用随机数改写文件名和文件路线:一个是上传后不能够访谈;再来就是像shell、.php 、.rar和crossdomain.xml这种文件,都将因为重命名而不可能攻击;
4.单独设置文件服务器的域名:由于浏览器同源战术的关联,一应有尽有顾客端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等难题将得到解决。

本文由澳门新葡8455手机版发布于计算机编程,转载请注明出处:PHP面试题集锦,php中session机制的精解

上一篇:PHP面向对象的几点补充,浅谈PHP中类和目的的相 下一篇:没有了
猜你喜欢
热门排行
精彩图文