session?cookie?application?

news/2024/5/18 15:27:41 标签: session, cookie

sessioncookie?application?

前言

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

session_5">一、session

session_6">1、什么是session

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

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

session_11">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对象时不能复制给其他变量,否则报错

session_31">3、session的缺点

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

cookie_36">二、cookie

cookie_37">1、什么是cookie

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

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

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

cookie_43">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')
})

cookie_93">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。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


http://www.niftyadmin.cn/n/1678285.html

相关文章

javascript 基本使用—字符串、变量、数组、函数、for循环

什么是javascript&#xff1a;JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。什么是jQuery&#xff1a;jQuery是一个优秀的JavaScript库&#xff0c;提供许多封装好的功能。javascript 在…

UML类图简介

UML类图简介 类图(Class diagram)由许多&#xff08;静态&#xff09;说明性的模型元素&#xff08;例如类、包和它们之间的关系&#xff0c;这些元素和它们的内容互相连接&#xff09;组成。类图可以组织在&#xff08;并且属于&#xff09;包中&#xff0c;仅显示特定包中的相…

转:C#开源资源大汇总

C#开源资源大汇总2009-01-05 22:59C#开源资源大汇总 一、AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架。Encase 独特的提供了把方面(aspects)部署到运行时代码&#xff0c;而其它AOP框架依赖配置文件的方式。这种部署方面(aspects)的方法帮助缺少经验的开发人…

OEA中的缓存模块设计

项目组目前开发的基于OEA框架的GIX4项目&#xff0c;本次功能已经完成得差不多了&#xff0c;本次迭代的目标主要是提升产品的性能。由于GIX4是C/S结构的应用程序&#xff0c;所以决定实现缓存模块来提升高繁数据访问的缓存。 本篇文章主要介绍了OEA框架中的缓存模块设计与一般…

vue入门了解

vue入门了解一、 Vue.js是什么&#xff1f;二、库和框架的区别1、库(Library 简写Lib)2、框架(Framework)三、MVVM的介绍四、 安装Vue1、cdn下载(需连接网络)2、CDN概况五、实例代码了解1、 Vue实例&#xff08;显示Hello Vue!以及获取系统当前时间&#xff09;显示Hello Vue!获…

C++ 用于大型程序的工具

《C Primer 4th》读书笔记 相对于小的程序员团队所能开发的系统需求而言&#xff0c;大规模编程对程序设计语言的要求更高。大规模应用程序往往具有下列特殊要求&#xff1a; 1. 更严格的正常运转时间以及更健壮的错误检测和错误处理。错误处理经常必须跨越独立开发的多个子系统…

.net; .com; .gov; .org; .edu这些代码分别是什么意思..

.net&#xff1b;互联网络性质 .com&#xff1b;商业 .gov&#xff1b;政府 .org&#xff1b;组织协会 .edu 教育 一个标准域名&#xff1a;http://www.jx.gov.cn 协议"://""级别""域名名字""性质""地区"转载于:https://blo…

设计模式笔记--单例模式

常用设计模式有23中&#xff0c;分为&#xff1a; 创建型模式&#xff08;主要用于创建对象&#xff09; 1、单例模式 2、工厂方法模式 3、抽象工厂模式 4、建造者模式 5、原型模式 行为型模式 &#xff08;主要用于描述对象或类是怎样交互和怎样分配职责&#x…