session?cookie?application?

前言

在完成购物车界面中购物列表查询出数据的时候,我发现方法其实有多种,其中session、cookie、application是我考虑可以使用到的。那么今天我们就来聊聊session、cookie、application的区别以及运用。
在这里插入图片描述

一、session

1、什么是session

session是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运行在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。
这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串

除了SessionID,在每个Session中还包含很多其他信息。但是对于编写ASP或ASP.NET的程序员来说,最有用的还是可以通过访问ASP/ASP.NET的内置Session对象,为每个用户存储各自的信息。

2、session的使用

ASP内一共建了7个对象,有Session、Application、Cookie、Response、Request、Server等。在其他的服务器端脚本语言如JSP、PHP等中也有其类似的对象,只是叫法或者使用方法上不太一样。

使用首先第一点就是:ASP 判断Session变量是否存在的4种方法
如果去读取没有初始化的Session变量,将得到Empty值(空值)。所以可以利用该值来判断Session变量是否已经初始化。加入我们要判断名为sesName的变量是否已经建立,我们可以用以下4种方法:

//zouyan
1 、If Session("sesName") = "" Then ...
2 、If Session("sesName") = Empty Then ...
3 、If IsEmpty(Session("sesName")) Then ...
4 、If Cint(Session("sesName")) = 0 Then ...
其中第四种方法在Session变量没有初始化的情况下使用Cint函数来进行转换,将返回0值。

然后就是第二点: ASP.NET判断Session变量是否存在

//zouyan
if(Session[ "UserName "]   ==  null) 
//用if(Session[ "UserName "] ==   "") 或者if(Session[ "UserName "]   ==   " ") ,否则会报错!

注意:没有使用Session对象时不能复制给其他变量,否则报错

3、session的缺点

  • Session变量和cookies是同一类型的。如果某用户将浏览器设置为不兼容任何cookie,那么该用户就无法使用这个Session变量!
  • 因为创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护
  • 随着站点访问量的增大,服务器将会因此而无法正常运行

二、cookie

1、什么是cookie

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个绿卡吧,每人一个,无论谁访问都必须携带自己的绿卡。这样服务器就能从绿卡上确认客户身份了。这就是Cookie的工作原理

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

2、cookie的使用

举个栗子:解决http无状态的问题
有的登录界面,输入信息之后下面会有一个7天免登录的按钮。那我们就单独根据cookie来完成。

//zouyan
let express = require('express')
let cookieParser = require('cookie-parser')

let app = express()
app.use(express.static('public'))
//使用cookie-parser,解析浏览器携带过来的cookie为一个对象,随后转到request上
app.use(cookieParser())

“种”cookie

//zouyan
app.get('/t1', (request, response) => {
//当访问test1路由时会给客户端“种”一个cookie
//在express中给客户端“种”一个cookie,不用借助任何第三方库

 //给客户端“种”下一个会话cookie
 //response.cookie('demo',123)
 //给客户端“种”下一个持久化cookie
 response.cookie('demo', 123, { maxAge: 30 * 1000 })
 response.send('<h2>南橙大帅哥种下一个cookie</h2>')
})

“读”cookie

//zouyan
app.get('/t2', (request, response) => {
//当访问test2时,会获取到浏览器携带过来的cookie
//在express中更翻遍的获取客户端携带过来的cookie,要借助一个中间件,名字:cookie-parser
 console.log(request.cookies)
 const { demo } = request.cookies
 console.log(demo)
 response.send('<h2>南橙大帅哥去读取一个cookie</h2>')
})

“删”cookie

//zouyan
app.get('/t3', (request, response) => {
 //第一种删除方式:
 //response.cookie('demo','',{maxAge:0})
 //第二种删除方式:
 response.clearCookie('demo')
 response.send('南橙大帅哥删除了一个cookie')
})

3、cookie的缺点

  • Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。
  • 安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。
  • 有些状态不可能保存在客户端。
    例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

三、application

1、什么是application

当你创建一个ActionServerPages的时候,你就创建了一个类似子程序的东西。当你创建了一组ActionServerPages,那么你就是创建了一个application。

application对象提供了对javax.servlet.ServletContext对象的访问,用于多个程序或者多个用户之间的共享数据。对于一个容器而言,每个用户都共用一个application对象,这一点与session对象不同。服务器启动后就会产生application对象,当客户在所访问的网站的各个页面之间浏览时,所用的application对象都是一个,知道服务器关闭,且所有的客户的application对象都是一个

2、application的使用

简单应用——数字计数器(计算访问界面的次数)
显示如下:
在这里插入图片描述
代码如下:

//zouyan
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>大帅哥</title>
</head>
<body>
	<%
		//获得num对象的值
		Object numtemp = application.getAttribute("num");
		//初始值设定num为0
		if(numtemp==null){
			application.setAttribute("num", "0");
		}
		String num = (String)application.getAttribute("num");
		//没访问一次,给num值自增1
		int n = Integer.parseInt(num)+1;
		//将累加后的值赋给num对象
		application.setAttribute("num", String.valueOf(n));
	%>
	访问次数是:<%=n %>
</body>
</html>

3、application的缺点

  • 数据总是存储在服务端,安全性比较高,但不易存储过多数据。
  • 检索数据速度快,但缺乏自我管理机制,数据不会自动释放。

四、总结

其实后期我还去了解了一下禁用 Cookies后,如何使用 Session ?
如果禁用了 Cookies,服务器仍会将 SessionID以 cookie 的方式发送给浏览器,但是,浏览器不再保存这个cookie (即SessionID) 了。
如果想要继续使用Session,就需要采用 URL 重写 的方式来实现,可以参考 :
https://www.cnblogs.com/Renyi-Fan/p/11012086.html.

我是南橙,一只逐渐秃头的橙子Orange。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值