PHP......会话控制SESSION与COOKIE
一、SESSION
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。
在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。以及如果需要的话,可能还有一定的操作空间。
<?php
session_start(); //开启session
$_SESSION["uid"] = "zhangsan"; //写入session
echo $_SESSION["uid"];//获取
?>
<a href="test.php">跳转</a>
第二个页面:
<?php
session_start();
echo $_SESSION["uid"];
?>
注意:在一个页面存入session,即使关闭该页面,其他页面也能获取到session,只要浏览器不关就行,一旦关闭浏览器,session就不存在了。
<h1>登录</h1>
<form action="loginchuli.php" method="post">
<div>用户名:<input type="text" name="uid" /></div><br />
<div>密码: <input type="password" name="pwd" /></div><br />
<div><input type="submit" value="登录" /></div>
</form>
登录处理页面:
<?php
session_start();
include("../DB.class.php");
$db = new DB();
$uid =$_POST["uid"];
$pwd = $_POST["pwd"];
$sql = "select count(*) from Users where Uid= '{$uid}' and Pwd = '{$pwd}'";
$r= $db->StrQuery($sql,0,"weixin");
if($r==1)
{
$_SESSION["uid"] = $uid;
header("location:main.php");
}
else
{
header("location:login.php");
}
主页面:
<?php
session_start();
//必须登录才能访问当前页面,若不加判断,可以通过输入URL地址进入当前页面,所以涉及登录时必须加判断
if(empty($_SESSION["uid"]))
{
header("location:login.php"); }
echo $_SESSION["uid"];
?>
例3:加入购物车,控制购买数量
水果展示页面:
<body>
<h1>水果列表</h1>
<table width="800" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>水果名称</td>
<td>水果价格</td>
<td>水果产地</td>
<td>水果库存</td>
<td>操作</td>
</tr>
<?php
session_start();
include("../DB.class.php");
$db = new DB();
$sql = "select * from Fruit";
$attr = $db->Query($sql);
foreach($attr as $v)
{
echo "<tr><td>{$v[1]}</td>
<td>{$v[2]}</td>
<td>{$v[3]}</td>
<td>{$v[4]}</td>
<td><a href='addgwc.php?code={$v[0]}' >加入购物车</a></td></tr>"; //GET方法传主键值
}
?>
</table>
<a href="gouwuche.php" >查看购物车</a>

加入购物车处理页面:
<?php
session_start();
$code =$_GET["code"];
//如果第一次点击
if(empty($_SESSION["sg"]))
{
//第一次点击需要造一个二维数组,存入session
$attr = array(array($code,1)); //$code为主键值,1代表数量
$_SESSION["sg"] = $attr;
}
else
{
//第n次点击,n!=1
$attr= $_SESSION["sg"];
//判断该水果是否已经存在
if(iscunzai($code)) //如果存在,数量加1
{
foreach($attr as $k=>$v)
{
if($v[0]==$code) //找到该主键值,数量加1
{
//改$v[1]不行,因为$v是赋值后的变量,它的变化与原数组$attr无关,所以必须用原数组去变化
$attr[$k][1]= $v[1]+1;
}
}
$_SESSION["sg"]= $attr;
}
else //若不存在,追加一个数组,存入session
{
$arr = array($code,1);
array_push($attr,$arr); $_SESSION["sg"] = $attr;
}
}
//判断该水果是否已经存在的方法
function iscunzai($c) //传入一个参数
{
$attr = $_SESSION["sg"]; //获取session中的数据
$b = false;
foreach($attr as $v)
{
$b= $b || in_array($c,$v); //$c是否在数组$v里面,返回true or false
}
return $b; //若存在,返回true,若不存在,返回false
}
header("location:showlist.php");
购物车页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
.sc{ width:100px; background-color:#03F; color:#FFF; text-align:center;}
.sc:hover{ cursor:pointer; background-color:#F90; color:#FFF;}
.aa{ font-size:x-large; color:#F00;}
input:hover{ cursor:pointer;}
</style>
</head> <body>
<h1>购物车</h1>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>水果名称</td>
<td>水果价格</td>
<td>数量</td>
<td>操作</td>
</tr>
<?php
session_start();
if(!empty($_SESSION["sg"]))
{
include("../DB.class.php");
$db = new DB();
$attr = $_SESSION["sg"];
foreach($attr as $v)
{
$sql = "select Name,Price from fruit where Ids = '{$v[0]}'";
$arr = $db->Query($sql);
echo "<tr>
<td>{$arr[0][0]}</td>
<td>{$arr[0][1]}</td>
<td>{$v[1]}</td>
<td><a href='deletegwc.php?code={$v[0]}'>删除</a></td>
</tr>";
}
}
?>
</table><br />
<a href='showlist.php'><input type='button' value='返回' /></a>
<a href='dingdan.php'><input type='button' value='提交订单' id='tj' /></a>


删除处理页面:
<?php
session_start();
$code = $_GET["code"];//获取主键值
$attr = $_SESSION["sg"];//获取session中的数据存入$attr //$attr为二维数组
foreach($attr as $k=>$v)//循环遍历二维数组
{
if($v[0]==$code ) //找到与传过来的主键值相等的主键值
{
//判断水果数量是否为1
if($v[1]>1)
{
$attr[$k][1] = $v[1]-1;
}
else //数量等于1
{
unset($attr[$k]);
}
}
}
$_SESSION["sg"] = $attr; //将删除操作完成后的二维数组存入session
header("location:gouwuche.php");
二、COOKIE
“Cookie”是小量信息,由网络服务器发 送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信 息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie。
特点:
1.存储在客户端的
2.每个人存一份
3.只能存储字符串
4.默认永不过期的,除非清除掉
5.安全性较低
用法:
setcookie("uid","zhangsan");//设置cookie
echo $_COOKIE["uid"];//获取cookie,若是在本页面取值,第一次会报错。
例子:
<?php
setcookie("uid","zhangsan"); //设置cookie
echo $_COOKIE["uid"]; //若本页面取值,第一次会报错
?>
<a href="main.php">跳转</a>
跳转页面:
<?php
echo $_COOKIE["uid"];
?>
注意:设置cookie后,在其他页面也可以取到cookie的值:"zhangsan"。
PHP......会话控制SESSION与COOKIE的更多相关文章
- PHP会话控制Session与Cookie
理解会话控制的概念: 阅读过HTTP协议相关资料的同学都会知道HTTP协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议,所谓无状态,指的是不会维护http请求数据,http请求是 ...
- PHP中的会话控制—session和cookie(实现数据传值功能)
1.session 登录上一个页面以后,长时间没有操作,刷新页面以后需要重新登录. 特点:(1)session是存储在服务器: (2)session每个人(登陆者)存一份: (3)session ...
- 会话控制:SESSION,COOKIE
1.http协议: HTTP—超文本传输协议,在TCP协议(长连接.像一个硬件)基础上; 特点:短连接,无状态协议,没法记录本次连接的状态;适用于静态页面的访问,对于后期某些页面是需要浏览器预知客户信 ...
- PHP处理会话函数session和cookie总结
本教程讲解PHP处理会话函数session和cookie总结 PHP处理会话函数包括:session_start.session_register.session_is_registered.sess ...
- php 会话控制(关于cookie的维护与生命周期)
cookie是在服务器端被创建并写回到客户端浏览器,浏览器接到响应头中关于写cookie的指令则在本地临时文件中. cookie内容的存储是键值对的方式,键和值都只能是字符串. 函数原型:setcoo ...
- 会话控制Session的应用
Session技术与Cookie相似,都是用来存储使用者的相关资料.但是最大不同之处在于Cookie是将数据存放于客户端计算机中,而Session则是将数据存放于服务器系统下. 在Web技术发展史上, ...
- 会话控制session,cookie(0521)
简单介绍: 一.什么是session? 1. 定义: Session,在计算机中,尤其是在网络应用中,称为“会话”.在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常 ...
- php 会话控制(禁用cookie后session为什么会失效?)
首先说明一点:session不一定必须依赖cookie,只是php默认客户端sessionid基于cookie方式保存. 到此,我想你也应该了解了php默认的session客户端保存方式是基于cook ...
- php 会话控制(了解cookie与session之间的区别与联系)
相同点: 都可以在解决HTTP无状态的问题,使同一个客户端在访问网站的多次请求中,可以保存,设置信息,并且在请求事物之间建立联系. 不同点: 简单的说cookie的信息保存在客户端,session的信 ...
随机推荐
- jquery的基本api
本文整理了一些主要的jQuery API,其中包括jQuery 核心函数和方法.jQuery属性参考手册.jQuery CSS操作.jQuery选择器.jQuery文档操作.jQuery筛选操作.jQ ...
- git设置及常用命令
下载 下载地址:https://git-scm.com/downloads windows系统安装 默认安装即可. 其它系统安装方式请自行百度,网上教程很多. 设置 windows桌面右键,选择Git ...
- CDH配置JAVA_HOME
jdk成功安装 java -version 正确显示版本 echo $JAVA_HOME 正确输出路径 但CDH链接数据库还是报错: Error: JAVA_HOME is not set and ...
- Spring Data Redis 2.x 中 RedisConfiguration 类的新编写方法
在 Spring Data Redis 1.x 的时候,我们可能会在项目中编写这样一个RedisConfig类: @Configuration @EnableCaching public class ...
- vSphere共享存储全配置流程
1.Openfiler的安装 Openfiler 由rPath Linux驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域 ...
- Python导入不同文件夹下模块
import os.path as osp import sys def add_path(path): if path not in sys.path: sys.path.insert(0, pat ...
- Eclipse 运行程序
运行 Java 程序 我们可以在 Package Explorer 视图 可以在 Package Explorer 视图中快速运行 Java 程序. Package Explorer 视图: 鼠标右击 ...
- 从git上拉下来的严选weex项目demo
项目地址 https://github.com/zwwill/yanxuan-weex-demo 在package.json里"author"之类后面加上 "privat ...
- diango-tinymce富文本编译器
应用到项目中 在settings.py中为INSTALLED_APPS添加编辑器应用 INSTALLED_APPS = ( ... 'tinymce', ) 在settings.py中添加编辑配置项 ...
- 【BZOJ1812】[Ioi2005]riv 树形DP
[BZOJ1812][Ioi2005]riv Description 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河, ...