一:cookie

1.创建cookie

关键字:setcookie 用于保存cookie

原理:当浏览器访问cookie.php页面时,我们的服务器就会以set-cookie的方式将cookie信息回送到http响应,当浏览器获取到信息后,会保存在本机

    //第一个参数:cookie(key).第二个参数:表示val.第三个参数表示cookie值
setcookie("name","huahua",time()+3600);
echo "成功";

2.查询cookie(获取客户端的cookie信息)

cookie信息是保存在$_COOKIE超全局数组中的

   // 超全局数组
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
//获取指定的键对应的值
$name=$_COOKIE['name'];
echo "$name";

3.更新cookie(重新设置cookie)

关键字:setcookie:参考创建cookie

4.删除cookie

    // 删除某个键值对
setcookie("password","",time()-3600);
// 删除所有键值对
foreach ($_COOKIE as $key => $value) {
setcookie("$key","$value",time()-3600);
}

实例:判断你是否第一次登陆

    if (!empty($_COOKIE['lastvisit'])){
echo "您上次登陆的时间为".$_COOKIE['lastvisit'];
setcookie('lastvisit',date("Y-m-d H:i:s"),time()+3600);
}else{
echo "您是第一次登陆";
setcookie('lastvisit',date("Y-m-d H:i:s"),time()+3600);
}

二:session

1.添加session

<?php
session_start();
// 字符串
$_SESSION["name"]="huahua";
// 数字
$_SESSION['aeg']=18;
// 布尔值
$_SESSION["isgirl"]=true;
// 数组
$arr1=array("hah","我们");
$_SESSION["arr1"]=$arr1;
// 对象
class Dog{
private $name;
private $intro;
function __construct($name,$intro){
$this->name=$name;
$this->intro=$intro;
}
public function getname(){
return $this->name;
}
}
$d=new Dog("xiaogou","i am good");
$_SESSION["dog1"]=$d;
echo "ook";
// 使用超全局数组查看session
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>

2.获取cookie数据

<?php
// 获取所有的session数据
echo "获取session数据";
// 需要开启session
session_start();
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
// 字符串
echo "name=".$_SESSION["name"];
echo "<br/>";
// 数字
echo "age=".$_SESSION["aeg"];
echo "<br/>";
// 数组
foreach ($_SESSION["arr1"] as $key => $value) {
echo "$key=$value<br/>";
}
// 取对象数据
// 需要加载类的信息。因为是从session中取得数据,而session中并没有保存类的信息
class Dog{
private $name;
private $intro;
function __construct($name,$intro){
$this->name=$name;
$this->intro=$intro;
}
public function getname(){
return $this->name;
}
}
$xiaogou=$_SESSION["dog1"];
echo $xiaogou->getname();
?>

3.更新session数据

<?php
session_start();
$_SESSION["name"]="hei";
$_SESSION["aeg"]=99;
echo "更新成功";
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>

4.删除session数据

<?php
session_start();
// 删除指定键值对
unset($_SESSION['name']);
// 删除所有的session信息
session_destroy();
?>

购物大厅例题:

buy.php

<?php
echo "<h1>购物大厅</h1>";
if (isset($_GET['PHPSESSID'])) {
session_id($_GET['PHPSESSID']);
// 重置该页面的ssesion_id
}
session_start();
$sid=session_id();
// echo SID; SID的输出为PHPSESSID=mpsav4071jlu8iue98tiujdp91
echo "<a href='shoppre.php?bookid=sn001&bookname=天龙八部&PHPSESSID=$sid'>天龙八部</a><br/>";
echo "<a href='shoppre.php?bookid=sn002&bookname=聊斋&PHPSESSID=$sid'>聊斋</a><br/>";
echo "<a href='shoppre.php?bookid=sn003&bookname=红楼梦&PHPSESSID=$sid'>红楼梦</a><br/>";
echo "<a href='shoppre.php?bookid=sn004&bookname=西游记&PHPSESSID=$sid'>西游记</a><br/>";
echo "<a href='buylist.php?PHPSESSID=$sid'>查看您购买的商品列表</a>";
?>

showpre.php

 <?php
if (isset($_GET['PHPSESSID'])) {
session_id($_GET['PHPSESSID']);
}
//注意:sid的设置在session_start之前还是之后
$sid=session_id();
session_start();
// 接收书号和书名
$bookid=$_GET['bookid'];
$bookname=$_GET['bookname']; $_SESSION["$bookid"]="$bookname";
echo "购买商品成功";
echo "<a href=buy.php?PHPSESSID=$sid>返回购物大厅</a>";
?>

buglist.php

 <?php
if (isset($_GET['PHPSESSID'])) {
session_id($_GET['PHPSESSID']);
}
session_start();
echo "购物车商品有:<br/>";
foreach ($_SESSION as $key => $value) {
echo "书号是$key,书名是$value<br/>";
}
?>

界面显示:

问题:当用户禁用cookie后,怎样使用session技术共享多个页面呢?(重写url)

  1. 在每个超链接上添加一个 PHPSESSID=session id。同时每个页面判断是是否有已生成的session id 。看上例子
  2. 使用常量SID。
  3. 设置php.ini下的session.use_trans_sid = 1

【二十五】cookie与session学习总结的更多相关文章

  1. Python 爬虫(二十五) Cookie的处理--cookielib库的使用

    Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持. 该模块主要功能是提供可存储cookie的对象.使用此模块捕获cookie并 ...

  2. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  3. C#学习基础概念二十五问

    C#学习基础概念二十五问 1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal ...

  4. 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧

    目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...

  5. WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]

    原文:WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇] 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Tra ...

  6. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

  7. 二十五种网页加速方法和seo优化技巧

    一.使用良好的结构 可扩展 HTML (XHTML) 具有许多优势,但是其缺点也很明显.XHTML 可能使您的页面更加符合标准,但是它大量使用标记(强制性的 <start> 和 <e ...

  8. 剑指Offer(二十五):复杂链表的复制

    剑指Offer(二十五):复杂链表的复制 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...

  9. Bootstrap <基础二十五>警告(Alerts)

    警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...

  10. VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池

    VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池 终端服务池是指由一台或多台微软终端服务器提供服务的桌面源组成的池.终端服务器桌面源可交付多个桌面.它具有以下特征: 1.终端 ...

随机推荐

  1. 微信JS-SDK 选取手机照片并进行上传

    项目中遇到需要选取照片上传的需求,因为网页运行在微信的浏览器里面,所以用微信的 js-sdk 提供的选取照片功能,来进行项目开发.实际开发中需要用到微信web开发者工具,详细参考链接:https:// ...

  2. 开源项目 log4android 使用方式详解

    话不多说, 直接上主题. log4android 是一个类似于log4j的开源android 日志记录项目. 项目基于 microlog 改编而来, 新加入了对文件输出的各种定义方式. 项目地址: 点 ...

  3. 字符串的缺点以及StringBuilder

    字符串的缺点: String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的 ...

  4. 教你3分钟读懂HTML5语言的特点

    HTML5的跨平台技术 HTML5技术跨平台,适配多终端.传统移动终端上的Native App,开发者的研发工作必须针对不同的操作系统进行,成本相对较高.Native App对于用户还存在着管理成本. ...

  5. RandomAccessFile多线程下载、复制文件、超大文件读写

    最近在准备面试,翻了翻自己以前写的Demo,发现自己写了不少的工具包,今天整理了一下,分享给大家. 本文包含以下Demo: 1.常用方法测试 2.在文件中间插入一段新的数据 3.多线程下载文件 4.多 ...

  6. JavaScript DOM 编程艺术(1)---> JavaScript语法

    一.  JavaScript语法目录 语法 操作 条件语句 循环语句 函数 对象 二.  具体内容 2.1 语法 javaScript代码要通过HTML/XHTML文档才能执行.可以有两种方式完成这一 ...

  7. 简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一

    简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一 分页非为前端分页  和 后端分页,前端分页只有适用于B/S,B/S的呈现速度远远不如C/S,而C/S则没有这个问题,所以分页必然是 ...

  8. Intellij自动下载导入框架包和常用快捷键

    忽然发现intellij尽然可以自动导入 框架所需的包,而且可以选择jar包版本,瞬间发现Maven,gradle管理jar包还得写配置文件弱爆了. 以Hibernate为例: 1.ProjectSt ...

  9. (一)—Linux安装与硬盘分区

    相信很多人对linux充满了喜爱,尤其是技术人员,玩惯了windows更想尝试一下这个系统.关于它的优点多多,当然,你的好你的坏,用过才明白!下面我这个菜鸟也来玩装个玩玩. 我不会那么冲动,上来就把自 ...

  10. C++彩色数据流动界面

    一个数据流动界面 #include <windows.h> #include <time.h> #include <cstdio> #include <str ...