php函数_post请求_get请求_cookie会话机制_session会话机制

作者: 鲁智深 分类: PHP 发布时间: 2015-02-04 14:03

一、post和get请求方式发来的数据

1、用$_GET接收请求过来的参数

比如:http://localhost/php2/php/16/1.php?name=luzhisheng&password=1241241

我们在url绑定了name=luzhisheng password=1241241 age=18,此时用$_GET可以接收地址中得到的数据

2、接收post请求方式

客户端html页面,通过form表单提交过来

点击submit按钮,会提交到action后面的地址

我在action后面的地址中,用$_POST接收全部的post数据

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
     header("Content-type:text/html;charset=utf-8");
     echo "-----------接收post-------------<br/>";
     var_dump($_POST);
     echo "<br/>-----------接收get-------------<br/>";
     var_dump($_GET);
?>

<form action="1.php?name=luzhisheng&password=1241241" method="post">
      <input type="text" name="username"/>
      <input type="password" name="password"/>
      <input type="submit" value="登录">
</form>

二、cookie会话机制

一次会话概念:从打开浏览器开始到关闭浏览器属于一个会话,中间打开多个页面都是属于同一个会话

查看cookie值,谷歌浏览器–》审查元素–》resources–》域名–》name/values 删除cookie值,右键clear

1、为什么要用会话技术

http协议,是无状态的

http协议,不能告诉服务器,多个请求来自同一个客户端

2、会话跟踪的目的

让服务器能够识别同一个客户端发来的连续请求

3、会话跟踪方式

http是无状态的协议,所以不能维护两个事物间的状态,要服务器能够识别请求省份

那么我们必须让客户端请求服务器的时候,带上能够表名自己身份的消息。

使用cookie(客户端浏览器保存)

使用session(在服务器保存)

4、cookie机制

cookie会话的特点:

cookie是有服务器端产生的,保存在客户端浏览器

cookie是放在html头文件传输的(在设置cookie的前面,不能有任何的输出)

cookie的安全性是较低

cookie是有生命周期的,只能在生命周期中有效

设置cookie()

setcookie(“cookie_name”,”cookie_value” [,expires,path,domain,sercure]);

cookie_name:名称

cookie_value:值

expires:生命周期,默认是0,在当前会话中永久有效。单位是秒,如果是想设置成声明周期是1分钟:time()+60

path:设置cookie起作用的目录,一般用”/”,“/”域名下的所有目录通用(表示全站通用)

domain:设置cookie的域名,指定在什么域名下有效

sercure:0|1 默认是0 1表示用https形式

1
2
3
4
5
6
7
8
<?php
     header("Content-type:text/html;charset=utf-8");
     
     echo "<br/>-----------设置 cookie-------------<br/>";
     setcookie("name","鲁智深",time()+5,"/");//5秒后cookie失效
     setcookie("age","18");
     setcookie("sex","女");
?>

读取cookie

cookie在服务器上是以数组形式存放的

$_COOKIE能够接收浏览器当前域名中有效cookie

$_COOKIE[‘cookie_name’];

1
2
3
4
5
6
7
<?php
     header("Content-type:text/html;charset=utf-8");
     
     echo "-----------接收cookie-------------<br/>";
     var_dump($_COOKIE['name']);
     var_dump($_COOKIE['age']);
?>

删除cookie

设置的cookie的生命周期

setcookie(“name”,”鲁智深”,time()-5,”/”);

清空cookie数据

setcookie(“name”);

1
2
     echo "<br/>-----------删除 cookie-------------<br/>";
     setcookie("name","鲁智深",time()-5,"/");

登录案例

index.php

1
2
3
4
5
6
7
8
9
<?php
     header("Content-type:text/html;charset=utf-8");
?>

<form action="login.php?action=login" method="post">
     用户名:<input type="text" name="userName"/><br/>
     密码:<input type="password" name="passWord"/>
     <input type="submit" value="提交"/>
</form>

login.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
     header("Content-type:text/html;charset=utf-8");
     $userName = $_POST['userName'];
     $passWord = $_POST['passWord'];
     $action = $_GET['action'];
     
     if($action == 'login'){
     if($userName == "luzhisheng" && $passWord == "123456"){
         echo '登录成功';
         setcookie("name",$userName);
     }else{
         exit("登录失败,重新登录");
     }
     }elseif($action == 'logout'){
         setcookie("name");
         //如果使用setcookie("name","",time()-1);设置cookie就没有了!empty($_COOKIE['name'])就会报错,如果是setcookie("name");cookie为空不报错
         echo "退出成功";
     }
?>

single.php

1
2
3
4
5
6
7
8
9
10
<?php
     header("Content-type:text/html;charset=utf-8");
     if(!empty($_COOKIE['name'])){
         echo "你好".$_COOKIE['name'];
         echo "<a href='login.php?action=logout'>退出</a>";
         echo "<br/>这是p1内容";
     }else{
         echo "登录后在访问";
     }
?>

session会话机制

1、session概述:

seesion和cookie一样,存放了客户的相关信息。seesion是把客户信息存放在服务器端的。

服务器端,存放了很多用户的信息,如何找出一个特定的信息?客户端携带唯一编号就是seesionid,该seesionid是由26个十六进制的字符组成,不易重复,seesion和cookie都是以数组形式存放数据

2、seesion的使用:

session_start();开启一个session会话

先判断有没有带过来session_id(通过cookie带过来);

如果没有,服务器认为客户端是第一次访问,会新产生seesion_id,并且以cookie形式写入客户端;

会产生一个session空文件,在session.save = “D:/wamp/tmp”中,文件名sess_sessionid;

如果能取到session_id,就会用该session_id找到服务器端的session文件。

1
2
     echo "----------开启一个seesion会话-------<br/>";
     session_start();

注册一个session变量

$_SESSION[‘session_key’] = session_value;

全局通用

1
2
3
4
     echo "----------注册session变量-------<br/>";
     $_SESSION['name'] = 'luzhisheng';
     $_SESSION['age'] = 18;
     $_SESSION['sex'] = 'nv';

使用session

获取session中的name值

说明:在同一次会话的时候,存放session的cookie一直有效,所以在服务器端一直能取到相同的sessionid,也能找的相应的session文件

1
2
     echo "<br/>----------使用seesion-------<br/>";
     var_dump($_SESSION);

销毁session

①unset($_SESSION[‘session_key’]);销毁一个session变量

1
2
     echo "<br/>----------删除session(单个变量)-------<br/>";
     unset($_SESSION['name']);

②通过遍历来删除

1
2
3
4
     echo "<br/>----------删除全部session变量一-------<br/>";
     foreach($_SESSION as $key=>$val){
         unset($_SESSION[$key]);
     }

③全部删除

1
       $_SESSION = array();

④销毁

1
2
     echo "<br/>----------销毁全部session变量二(文件都没有了)-------<br/>";
     session_destroy();

注意:uset($_SESSION)不能删除session,因为$_SESSION是预定义变量

session的垃圾回收机制(gc机制)

①因为一次会话的结束,存放sessionid的cookie的生命周期的完结,会导致在session_start的时候创建的session文件失效(无法在被访问),长期以往,会在服务器上存在越来越多的已经不能再次使用的session文件,浪费了服务器资源。

②php.ini中的配置如下:

session.gc_maxlifetime = 1440;定义1440秒未被访问session文件清除,在执行session_start启动垃圾回收机制

③启动垃圾回收机制有一定的概率,当前概率是1/1000

session.gc_probability = 1

session.gc_divisor = 1000

seesion_id();

可以获取seesion_id();

1
2
     echo "<br/>----------查看session_id-------<br/>";
     echo session_id();

我们也可以在session_start()之前设置session

1
2
3
4
     echo "<br/>----------指定session id-------<br/>";
     session_id("0ia4uhtunrca9buid7883mt5v7");
     session_start();
     var_dump($_SESSION);

seesion_name();

可以获取session的名字

1
2
     echo "<br/>----------查看session_name-------<br/>";
     echo session_name();

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注