PHP学习10——Cookie和Session技术

时间:2023-01-16 20:56:17

主要内容:

  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的内容。

PHP学习10——Cookie和Session技术

PHP学习10——Cookie和Session技术

PHP学习10——Cookie和Session技术

读取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次输出

PHP学习10——Cookie和Session技术

第8次输出

PHP学习10——Cookie和Session技术

第13次输出

PHP学习10——Cookie和Session技术

删除cookie

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

1、浏览器手动删除cookie

PHP学习10——Cookie和Session技术

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的保存路径

PHP学习10——Cookie和Session技术

session.php

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

  

PHP学习10——Cookie和Session技术

PHP学习10——Cookie和Session技术

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/>';
}
?>

输出

PHP学习10——Cookie和Session技术

PHP学习10——Cookie和Session技术

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已经彻底销毁

PHP学习10——Cookie和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学习10——Cookie和Session技术

PHP学习10——Cookie和Session技术

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

所有可以这样使用

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

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

ok,就到这里。

PHP学习10——Cookie和Session技术的更多相关文章

  1. 理解cookie和session技术

    一.HTTP协议的无状态性 WEB应用程序使用的是HTTP协议传输数据的,HTTP协议是一个无状态的协议,这次数据传输完毕,客户端会和服务端断开连接,再次传输数据就需要重新建立新的连接,这也就无法会话 ...

  2. 浅谈Cookie与Session技术

      一.什么是状态管理 将客户端与服务器之间多次交互当做一个整体来看,并且将多次交互所涉及的数据(状态)保存下来. 会话:当用户打开浏览器,访问多个WEB资源,然后关闭浏览器的过程,称之为一个会话,选 ...

  3. Django 学习之cookie与session

    一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  4. Django-website 程序案例系列-10 cookie 和 session的应用

    cookie:  现在所有网站基本都要开启cookie 客户端浏览器上的一个文件 例如:   {‘key’: 'sefwefqefwefw'} 是一个键值对 简单实现cookie认证: user_in ...

  5. node学习之cookie和session

    c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏 ...

  6. 浅析PHP中cookie与session技术

    1.cookie是什么? cookie指某些站点为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 通俗来理解就是,你去一个专卖店或者超市买东西,然后店里给你办一张 ...

  7. web开发中的Cookie与Session技术

    Cookie Cookie的由来 HTTP协议是无状态的,无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后 ...

  8. Django学习之Cookie和Session

    一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...

  9. nodeJs学习-08 cookie、session

    http-无状态的:两次访问之间,无区别,cookie可解决 cookie:在浏览器保存一些数据,每次请求都会带过来: 弊端:可以查看修改,并不安全.大小有限(4K) 读取--cookie-parse ...

随机推荐

  1. Leetcode&colon; Palindrome Partitioning II

    参考:http://www.cppblog.com/wicbnu/archive/2013/03/18/198565.html 我太喜欢用dfs和回溯法了,但是这些暴力的方法加上剪枝之后复杂度依然是很 ...

  2. PHP正则表达式详解(三)

    1.preg_match() :preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 . 语法:int preg_match( string pattern, strin ...

  3. C语言register关键字—最快的关键字 ---------------转自http&colon;&sol;&sol;blog&period;sina&period;com&period;cn&sol;s&sol;blog&lowbar;6a1837e90101128k&period;html

    register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对.你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很 ...

  4. cocos2d-x 仿真树叶飘落效果的实现

    转自:http://blog.csdn.net/ufolr/article/details/7624851 最近项目中需要一个落叶的效果,本来想用粒子特效来实现,但是几经调试,虽然调出了落叶的效果,但 ...

  5. jfinal文件上传和form表单值为null的解决方法

    今天使用jfinal做上传提交的时候,遇到一个问题:添加了上传功能,原来的form表单submit提交时所有值都为null了,研究了很长时间,终于发现 在jfinal上传时候,jsp加 enctype ...

  6. (二十八)QQ好友列表的展开收缩

    要通过监听HeaderView上面的Button来进行操作: 通过addTarget方法即可,应该将按钮的点击方法封装在HearView控制器内部. 列表收起来的原理: tableView: numb ...

  7. 学机器学习,不会数据分析怎么行——数据可视化分析&lpar;matplotlib&rpar;

    前言 前面两篇文章介绍了 python 中两大模块 pandas 和 numpy 的一些基本使用方法,然而,仅仅会处理数据还是不够的,我们需要学会怎么分析,毫无疑问,利用图表对数据进行分析是最容易的, ...

  8. python 获取视频文件的大小,时长等

    举例说明: import os import sys import xlwt from moviepy.editor import VideoFileClip file_dir = u"G: ...

  9. 25-javaweb接入支付宝支付接口

    想熟悉支付宝接口支付,后面可能会用,不如在课设中试试手.好吧听说支付宝不微信支付要简单些,就拿支付宝的先练下手吧. 基本学习流程,百度一下,找篇博客看下. 推荐下面这个篇博客,讲的挺好的,复制过来. ...

  10. 「CodePlus 2017 11 月赛」Yazid 的新生舞会(树状数组&sol;线段树)

    学习了新姿势..(一直看不懂大爷的代码卡了好久T T 首先数字范围那么小可以考虑枚举众数来计算答案,设当前枚举到$x$,$s_i$为前$i$个数中$x$的出现次数,则满足$2*s_r-r > 2 ...