• PHP学习10——Cookie和Session技术


    主要内容:

    1. Cookie技术
      1. 创建cookie
      2. 查看cookie
      3. 读取cookie
      4. 用cookie记录访问时间和次数
      5. 删除cookie
      6. cookie的生命周期
    2.  Session技术
      1. session工作原理
      2. session控制
      3. session的存储结构
      4. 传递session_id

    cookie和session是2中不同的存储机制。

    cookie是从一个web页面到另一个web页面的数据传递方法,它被存储在客户端。

    session是让数据在页面中持续有效的方法,它存储在服务器。

    Cookie技术

    cookie将浏览器网页的特定信息以文件形式保存在客户端硬盘中,再次访问该网站,浏览器首先尝试读取cookie文件,读取到数据供浏览器使用。

    常见的应用是登陆空间、博客,读取每个人的个性化设置。

    cookie常用语3个方面:

    • 记录访客的某些信息
    • 在页面之间传递信息(通常cookie不会用来保存密码,但是在一个页面设置的数据要在另一个页面使用,可以通过cookie技术实现)
    • 将查看的web网页存储在cookie临时文件中,可以加快网页的访问速度。

    创建cookie

        /*name是cookie变量名,value是值,time是失效时间(默认为0),
        path是cookie在服务器端的有效路径,domain是cookie有效域名,
        secure是否仅通过安全的https协议传输(默认为0),httponly是否仅通过http协议传输(默认为0)
        */
        //setcookie($name,$value,$time,$path,$domain,$secure,$httponly);

    cookie.php

    <?php
    	
    	//创建cookie
    	$sta=setcookie('testcookiename','testvalue',time()+60*60);
    	if($sta){
    		echo 'Cookie设置成功!';
    	}
    ?>
    

    输出

    Cookie设置成功!
    

    chrome浏览器查看cookie

    打开浏览器的设置》高级设置》

    隐私设置/内容设置》所有cookie和网站数据

    》找到你的网站名,以及cookie的名字,点击打开即可看到保存到cookie的内容。

     

    读取cookie

    PHP中使用超全局变量$_COOKIE来读取浏览器端的Cookie值

    如果没有设置cookie的失效时间,cookie会在浏览器关闭后失效。

    readcookie.php

    <?php
    	
    	//创建cookie
    	$sta=setcookie('testcookiename','testvalue',time()+60*60);
    	if($sta){
    		echo 'Cookie设置成功!<br/>';
    	}
    	
    	//创建cookie
    	setcookie('name','Tom');
    	setcookie('age','25');
    	
    	print_r($_COOKIE);
    ?>
    

    输出

    Cookie设置成功!
    Array ( [testcookiename] => testvalue [name] => Tom [age] => 25 )
    

    使用cookie记录访客访问时间和访问次数

    demo.php

    <?php
    	
    	//访问时间
    	echo "访问时间<br/>";
    	if(!isset($_COOKIE['visittime'])){
    		setcookie('visittime',date('Y-m-d H:i:s'));
    		echo '这是您第一次方位本网站<br/>';
    	}else{
    		echo '您上一次访问本网站是在:'.$_COOKIE['visittime']."<br/>";
    		echo '本次访问时间是:'.date('Y-m-d H:i:s')."<br/>";
    	}
    	
    	//访问次数
    	echo "访问次数<br/>";
    	if(!isset($_COOKIE['num'])){
    		setcookie('num',1);
    		echo '欢迎您首次访问本网站<br/>';
    	}else{
    		setcookie('num',$_COOKIE['num']+1);
    		echo '这是您今天第'.$_COOKIE['num']." 次访问本网站<br/>";
    	}
    	
    
    ?>
    

    第1次输出

    第8次输出

    第13次输出

    删除cookie

    没有设置失效时间,cookie随浏览器关闭而失效,如果要在浏览器关闭之前删除cookie,有2种方法。

    1、浏览器手动删除cookie

    2、通过程序删除cookie

    使用setcookie()删除cookie,将要删除的cookie有效时间设置为当前时间之前即可,

    setcookie.php

    <?php
    	//设置cookie
    	setcookie('name','Tom');
    	print_r($_COOKIE);
    
    ?>
    

    输出

    Array ( [name] => Tom )
    

    removecookie.php

    <?php
    	
    	//删除cookie
    	setcookie('name','Tom',time()-1);
    	print_r($_COOKIE);
    ?>
    

    输出

    Array ( )
    

     Cookie的生命周期

    如果不设置cookie过期时间,则表示他的生命周期会随着浏览器关闭而结束,这种cookie叫做会话cookie,一般不会保存在硬盘中,而是保存在内存中。

    如果设置了cookie的过期时间则浏览器会把cookie保存在硬盘中,再次打开浏览器依然会生效,知道他的有效时间超时。

    但是有的情况是不遵循这个说法的,现在的浏览器通常会限制每个域名的cookie数量和大小,因此在超过这个限制后,cookie即使没有超过时间也可能会被删除。

    Session技术

    与cookie相比,,session文件保存的数据在PHP中以变量形式创建,创建的session变量在生命周期(20分钟)中可以被跨页面的请求所使用。另外session文件是存储在服务器端的,比cookie存储在客户端安全,而且也没有类似cookie的存储长度限制。

    在计算机术语中,session指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销推相互系统所经过的时间,因此可以说session是一个特定的时间概念。

    session工作原理

    启动一个session会话时,程序会随机生成一个唯一的session_id,他也是session的文件名,此时session_id存储在服务器,当关闭页面后,session_id会自动注销,重新登录页面会再次生成一个随机且唯一的session_id。

    session的功能

    由于网页是一种无状态的连接程序,因此无法得知用于的浏览状态。在网上购物时,把很多商品加入了购物车,而在结账时网页却不知道你购物车有哪些物品,通过session可以记录这些信息,供用户再次使用。session适用于存储信息量比较少的情况。

    session控制

    4个步骤:

    • 启动会话
    • 注册会话
    • 使用会话
    • 删除会话

    启动session

    session_start();注意启动一个新的会话之前不可以有其他输出,否则出现错误,这类似于创建cookie。

    注册session

    所有session变量都会保存在数组$_SESSION中,只需给数组添加元素即可。$_SESSION['name']='Jim';

    在php.ini中有session的保存路径

    session.php

    <?php
    	//开启session
    	session_start();
    	
    	//创建2个session变量
    	$_SESSION['username']='Jim';
    	$_SESSION['password']='123456';
    	
    	echo "Session创建成功<br/>";
    ?>
    

      

    session变量的存储结构

    变量名|类型:长度:变量值;

    使用session

    使用方法类似cookie,直接读取数组

    删除session

    • unset($_SESSION['username']),删除单个session
    • $_SESSION=array(),注销所有session
    • session_destroy(),先注销session,然后结束当前session,释放session中所有资源,彻底将session销毁

    unsetsession.php

    <?php
    	//开启session
    	session_start();
    	
    	//创建2个session变量
    	$_SESSION['username']='Jim';
    	$_SESSION['password']='123456';
    	
    	//使用session
    	if(!empty($_SESSION['username'])){
    		$username=$_SESSION['username'];
    		echo 'session变量值赋值成功<br/>';
    	}else{
    		echo '该session变量未注册<br/>';
    	}
    	
    	//删除session
    	unset($_SESSION['username']);
    	if(empty($_SESSION['username'])){
    		echo 'session注销成功<br/>';
    	}
    ?>
    

    输出

    destroy_session.php

    <?php
    	//开启session
    	session_start();
    	
    	//创建2个session变量
    	$_SESSION['username']='Jim';
    	$_SESSION['password']='123456';
    	
    	//使用session
    	if(!empty($_SESSION['username'])){
    		$username=$_SESSION['username'];
    		echo 'session变量值赋值成功<br/>';
    	}else{
    		echo '该session变量未注册<br/>';
    	}
    	
    	//删除session
    	unset($_SESSION['username']);
    	if(empty($_SESSION['username'])){
    		echo 'session注销成功<br/>';
    	}
    	
    	//清空session
    	$_SESSION=array();
    	if(empty($_SESSION['username'])&&empty($_SESSION['password'])){
    		echo '全部session注销成功<br/>';
    	}
    	
    	//销毁session
    	session_destroy();
    	echo 'session已经彻底销毁<br/>';
    ?>
    

     输出

    session变量值赋值成功
    session注销成功
    全部session注销成功
    session已经彻底销毁
    

    传递session_id

    • 基于cookie的方式传递session。这种方法有限制,客户端可以禁用cookie
    • 通过URL参数传递,直接将session_id放入URL中

    session_cookie.php

    <?php
    	//开启session
    	session_start();
    	
    	//设置cookie
    	setcookie(session_name(),session_id(),time()+60*60*24);
    	
    	//创建2个session变量
    	$_SESSION['username']='Jim';
    	$_SESSION['password']='123456';
    	
    	echo 'session保存成功<br/>';
    
    ?>
    

    showsession.php

    <?php
    	//开启session
    	session_start();
    	
    	//设置cookie
    	//setcookie(session_name(),session_id(),time()+60*60*24);
    	
    	//创建2个session变量
    	//$_SESSION['username']='Jim';
    	//$_SESSION['password']='123456';
    	
    	echo 'session保存成功<br/>'.$_SESSION['username'].$_SESSION['password']='123456';
    
    ?>
    

    输出

    session保存成功
    Jim123456
    

    通过URL传递session

     session_url.php

    <?php
    	//开启session
    	session_start();
    	
    	//创建2个session变量
    	$_SESSION['username']='Jim';
    	$_SESSION['password']='123456';
    	
    	//输出下一个页面链接
    	echo '<a href=test.php?'.session_name().'='.session_id().'>test.php</a>';
    	
    
    ?>
    

    test.php

    <?php
    	session_start();
    	
    	echo '用户名:'.$_SESSION['username'].'<br/>';
    	echo '密码:'.$_SESSION['password'].'<br/>';
    ?>
    

    输出

     

    在PHP中有一个预定义常量SID,格式为name=ID,包含了session名和sessionid

    所有可以这样使用

    	//输出下一个页面链接
    	echo '<a href=test.php?'.SID.'>test.php</a>';
    

    web页面非常重要的cookie技术和session技术,这里核心要明白session和cookie的工作原理和不同之处。

    ok,就到这里。

  • 相关阅读:
    js——获取指定日期的前7天连续日期
    一个div自动充满当前屏幕的解决方法
    Cookie和Session
    Web服务器和浏览器间的工作原理
    软件测试基础概念
    K短路的几种求法
    ID字体
    搭建GitLab的Hexo博客记录
    项目selfcmp开发学习
    牛顿迭代法学习笔记
  • 原文地址:https://www.cnblogs.com/1906859953Lucas/p/9443141.html
Copyright © 2020-2023  润新知