java web登录前后改变sessionId标示的安全性问题解决

会话标识未更新问题 <br /> 有一段时间没有上优快云了,今天看到有好几个网友问我“会话标示未更新问题”,以下是我的解决办法。<br /> 我的系统在做AppScan安全扫描时,爆出一个高危漏洞:会话标识未更新。提供的解决办法是,在用户登录时始终使用新的会话。<br /> 我仔细查看了我的系统。原来在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说还是以前的那个session(事实上session也确实不 阅读详情

在我们打开web页面的时候,会有一个sessionId,登录之后,这个seesionId的值没变,一致存在,这种可能会变成会话固化安全漏洞,因此我们需要解决这种问题。解决方法很简单,在登录后改变这个会话的sessionId,这样这个未授权时的会话seesionId自然就失效,也不会产生固化的僵尸会话。

 一、在解决该问题之前,需要了解session会话的创建,session的创建方式主要有以下3种:

//1、这是大家最喜欢用的一种
HttpSession session = request.getSession();

//2、这种用法和1是一个效果, 获取session,如果存在则返回session,不存在则重新创建一个
HttpSession session = request.getSession(true);

//3、这种用法被很多人忽略,获取session,如果存在返回session,不存在则返回null
HttpSession session = request.getSession(false);

需要注意:request.getSession()和request.getSession(true)等效,只有当session一定存在或者sesson不存在时明确有创建session的需要,否则尽量使用request.getSession(false)。在实际的生产中,有时我们会把某些信息存在session当中,在这种场景当中,获取session的正确方法应该是:

String userName = "";
HttpSession session = request.getSession(false);
if(session != null){
    userName = (String)session.getAttribute("userName");
}

 二、如果项目中用到了Spring(其实只要是Java的稍大的项目,Spring是一个很好的选择),对session的操作就方便很多。如果需要在Session中取值,可以用WebUtils工具(org.springframework.web.util.WebUtils)的getSessionAttribute(HttpServletRequest request, String name)方法。源码如下:

/** 
 * Check the given request for a session attribute of the given name. 
 * Returns null if there is no session or if the session has no such attribute. 
 * Does not create a new session if none has existed before! 
 * @param request current HTTP request 
 * @param name the name of the session attribute 
 * @return the value of the session attribute, or <code>null</code> if not found 
 */  
public static Object getSessionAttribute(HttpServletRequest request, String name) {  
    Assert.notNull(request, "Request must not be null");  
    HttpSession session = request.getSession(false);  
    return (session != null ? session.getAttribute(name) : null);  
} 

自己使用在项目中直接使用:

String userName = WebUtils.getSessionAttribute(reqeust, "userName");

三、web登陆前后改变sessionId标识

上面介绍了这么多,现在进入问题主题,登录前和登录后sessionId的更换。直接上代码,一目了然:

//先验证登录成功之后再进行更换sessionId

HttpSession oldSession = request.getSession(false);
if(oldSession != null){
    oldSession.invalidate();  //废除掉登陆前的session
}
request.getSession(true);  //重新生成一个session,此时,登录前和登录后的sessionId就不一致了

//如果登录前session中的内容需要保留至整个项目,可以在这里将原来session中的内容重新拷贝到新的session中
//TODO

此时,再去查看登陆前和登陆后sessionId,发现已经更改,问题解决。

安全测试知识 测试用例评审记录 测试人员 需求名称 用例数 测试要点 疑问点 解决方案 Appcsan WASC威胁分类(中文)安全风险 URL 当前级别(High/ Medium/Low/Info)原始级别 bug一般会进行分类(日志伪造攻击数量X个,上传下载攻击 X个,XML注入攻击X个,其他 bug x个) 一、认证前会话 系统应支持“限制或禁止同一用户同时建立多个会话”的功能若同一账号的第二次登录建立会话,系统可以注销前一次的会话或者拒绝当前登录并给出账号已登录的提示。若系统因业务需求需要支持同一账号同一时刻多处 阅读详情

相关推荐

【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点

【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点

qq_44703886的博客 3618

前后端交互时后台SessionId一直改变的问题解决

** 问题 **: 在做前后端项目的时候,用户登录之后将用户相关信息存入Session,但是登录成功之后前端访问其他接口时,发现获取不到存入Session中的值, ** 解决方案 **: 之前的代码中获取Session中的值的代码 String userId = (String)request.getSession().getAttribute("userId"); 问题就出在这个request.getSession(), 这个方法是每次都会new一个新的Session,所以导致SessionId每次都会

weixin_44269614的博客 2744

qmc5883p芯片坐标系方向定义

问题 最近一个项目用到qmc5883p, 然而确定磁力计方向的时候发现datasheet上写的不是很清楚, 并且example中还有一个设置方向的一步, 于是测试了芯片坐标方向并记录了下来; 该芯片和qmc5883L方向并不一致; 结果 qmc5883P的datasheet给出来如下说明, Y为笔者添加的; 但是这个方向是按照datasheet的example设置的结果: //Define the sign for X Y and Z axis qmc5883p_write_reg(0x2

时有限 4119

记一次sessionId登陆后变化问题

由于是偶发情况,查找特别麻烦,经过一天的查找问题,终于定位到问题了,登陆页面有好几个字体路径是404,把样式内的字体删掉问题就解决了。系统用的spring+shiro+mybatis,偶尔登陆之后要么闪退,要么进去首页后又跳转到登陆页。

weixin_43275523的博客 564

利用HFSS仿真优化圆极化微带天线的耦合馈电设计

本文深入探讨了利用HFSS仿真软件优化圆极化微带天线性能的关键方法。通过对比传统直接馈电与耦合馈电方式,详细阐述了耦合馈电在提升阻抗匹配、改善轴比带宽及增强设计鲁棒性方面的显著优势。文章结合FR4板材的实战案例,逐步演示了在HFSS中建立模型、进行参数扫描与圆极化性能优化的完整流程,为设计高性能、高纯度的圆极化天线提供了实用指南。

weixin_29233333的博客 547

Orbbec-Gemini-335 深度相机 Python SDK 编译与配置全记录(Windows 环境)

本篇博客将围绕 Windows 系统下 Orbbec SDK 的 Python 配置与编译过程进行详细说明,主要使用的是官方提供的 pyorbbecsdk Python wrapper 项目以及 Orbbec SDK V2 Python Wrapper 配置指南,并记录了安装与配置过程中遇到的若干问题及解决办法。

Junseer的博客 1965

spring security登录前后sessionId不一致

spring security为了防止固定回话攻击会一直修改sessionId,所以在登录前存在session里的数据在登录后是获取不到的。为了解决这种情况可以监听session的变化做相应的更改。 @WebListener public class SessionListener implements HttpSessionListener, HttpSessionIdListener { @Override public void sessionCreated(HttpSession

fggdgh的博客 1969

Oracle EBS 寄销/VMI(2)-->采购篇

上篇有一部分设置需要建BPA后,将BPA编号与批准的供应商相关联.     本篇主要是讲的内容:一揽子采购协议-->准标采购订单-->收接入库-->子库转移-->创建冲减通知-->'按接收开票' 自动开票程序 1. PO-->采购订单à采购订单 创建一揽子采购协议,确定物料

陈显平的专栏-Oracle EBS 1万+

java 改变sessionid_java web登录前后改变sessionId标示的安全性问题解决

在我们打开web页面的时候,会有一个sessionId,登录之后,这个seesionId的值没变,一致存在,这种可能会变成会话固化安全漏洞,因此我们需要解决这种问题。解决方法很简单,在登录后改变这个会话的sessionId,这样这个未授权时的会话seesionId自然就失效,也不会产生固化的僵尸会话。一、在解决该问题之前,需要了解session会话的创建,session的创建方式主要有以下3种:/...

weixin_33820059的博客 2275

【RT-DETR涨点改进】损失函数改进篇 | RT-DETR引入SlideLoss损失函数,适合目标检测中面临的尺度变化、遮挡以及难易样本不平衡等复杂场景下的检测任务,含详细使用步骤

本文提出在RT-DETR目标检测模型中引入SlideLoss损失函数,以解决尺度变化、遮挡和难易样本不平衡等问题。SlideLoss通过自适应阈值划分正负样本,并对难样本赋予更高权重,使模型更关注分类边界样本。文章详细展示了SlideLoss的核心代码实现,并逐步指导如何在RT-DETR框架中集成该损失函数。实验表明,该方法能有效提升模型性能,特别适用于复杂场景下的目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 263

一文吃透 OData Deep Insert:从框架原理到 ABAP 实战

本文面向ABAP工程师,解析OData服务中的Deep Insert技术。文章首先阐述Deep Insert的业务背景,说明其适用于父子层级数据必须成组创建的场景(如销售订单与行项目)。随后深入框架实现机制,介绍SAP Gateway如何通过CREATE_DEEP_ENTITY方法处理嵌套请求,并强调开发者的责任边界。通过销售订单案例,文章对比了Deep Insert与$batch的适用场景差异,提供请求负载示例和DPC_EXT实现骨架代码。最后给出MPC_EXT声明深结构的三种套路,以及事务处理和错误处理

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

页面跳转路径出现;JSESSIONID=XXX的问题【前端VUE+后端JAVA】

前沿 后台的JAVA框架时在前后端没有分离的时候编写的,因为修改起来工程量比较庞大同时也很复杂,所以现阶段只是将前端用vue来重写项目框架,来减轻项目的运行负担。在与后台结合的时候还是会出现一些运行冲突而出现问题的状况。 问题说明 当cookie中的tooken过期或者cookie中没有信息的时候,正常启动项目之后在浏览器输入http://localhost:8080,应该被重定向到http://...

莫奈小姐姐的博客 7606

【目标检测】基于yolov5的安全帽佩戴检测系统(附代码和数据集)

【目标检测】基于yolov5的安全帽佩戴检测系统(附代码和数据集)

学无止境、积少成多、厚积薄发 3107

android实现session登录同步

最近在做一个项目,是html和android的混合开发项目。 在android端写了一个本地的登录功能,登录成功之后,打开嵌套的html界面,还提示登录(网页登录)。这显然是不友好的。 如何把本地登录的数据和打开的网页同步呢? 这个问题也是“折磨”了我好长时间。因为html界面是别人写的,后台用的是c#,学java的我很头痛啊。 后来在网上查找了很多资料。 这里你需要补习一下cookie...

程序员 5217

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java sessionid放入cookie_JAVA开发 SESSION和COOKIE的关系

HttpSession接口封装了Session的概念,Servlet容器提供了这个接口的实现。当一个会话开始的时候,Servlet容器就创建一个HttpSession对象,在HttpSession对象中存放客户的状态信息,Servlet容器为HttpSession对象分配一个唯一的Session ID,将其作为Cookie(或者作为URL的一部分,利用URL重写机制)发送给浏览器,浏览器在内存中保...

weixin_35452394的博客 204

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

实现手机扫描二维码页面登录,类似web微信-第二篇,关于二维码的自动生成

转载自:http://blog.youkuaiyun.com/otangba/article/details/8253822 接上一章,我们已经基本把业务逻辑分析清楚了 下面我们第一步,实现二维码的web动态生成。 页面的二维码包含的信息我在上一篇已经解释过,是一个页面的sessionID,这个sessionID主要是标示出哪个页面是哪个页面,例如你打开N个页面,必然每个页面的标示会不一样,只有你用手机...

weixin_30482181的博客 174

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从Http思考项目中的cookie和session+ServletContext

为什么我们要用cookie和session?首先,先说说Http,首先我们都知道的http是无状态的,什么是无状态?,就指协议对事务处理没有记忆能力,缺少状态意味着->如果后续处理需要前面的信息,需要重传,那么我每次连接传输的数据量就会很大,1,1+1,1+2,1+3...这不巨难受;它不像我们的Socket那样,连接了两个终端,夹个通道随便相互发信息通信,http的客户端只能通过请求服务器获取相关文件内容以及信息;那么问题来了,我们做一个网站,怎么在其他页面中也保存用户信息呢?,毕竟我登录之后要执行业务操

weixin_57128596的博客 542

JAVA开发 SESSION和COOKIE的关系

HttpSession接口封装了Session的概念,Servlet容器提供了这个接口的实现。当一个会话开始的时候,Servlet容器就创建一个HttpSession对象,在HttpSession对象中存放客户的状态信息,Ser...

congchangbei6601的博客 221

shiro安全框架

企业中使用的主流的权限框架主要有 Apache Shiro或者Spring Security,两者有哪些区别呢?

小蜜蜂1010的博客 1543

session机制

http是一种无状态的协议,使用这种协议时,客户打开一个连接向服务器发送一个请求,服务器对请求进行处理并作出应答,然后本次连接断开,服务器不会在任何地方对客户信息进行记录,因此,当同一个客户在第二次向服务器发送请求时,服务器会把这请求当作一次新的请求,与前次的请求无关。对于简单的web应用,这很适合,因为每个请求的结果仅仅只是获取一些静态的资源或信息,服务器不必知道一系列请求是否来自同一客户,也不...

df20070608的专栏 155

关于Session和Cookie的一些简单原理

用asp.net的高层api写过很多web,但是对session和cookie一直属于半懂不懂的状态,这几天啃了点,总结一下,不对的地方大家指正。 关于session:这个东西应该不是一个通用的产物,只不过各种服务器端技术都包括了这个,servlet有、asp有、asp.net有、php也有,原理大概相同。 关于cookie:这个应该算是一个标准了,各个浏览器都支持标准的cookie,j...

weixin_30363817的博客 87

Jmeter接口性能测试

1.jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。开源,免费且具有了LoadRunner95%以上的功能,性价比极高。 2.jmeter特点 支持对多种服务类型进行测试;

guo_qingxia的博客 5072

html访问时sessionid变,登录成功后,再请求后端接口,返回未登录发现session id 变了...

我最开始请求登录接口,登录成功后,再请求数据接口,返回未登录。于是我把登录接口跟数据接口脱离项目,放一个单独的html文件中,然后测试发现请求是成功的,session id是一致的;然后项目中的数据接口也能请求成功了,但等登录时效一过,项目中的数据接口又返回未登录了;只要我把单独的html(包含登录接口与数据接口)刷新,项目中的数据接口就能请求成功后台是java我在网上查了很多资料,基本上与我的情...

weixin_42353715的博客 568

[Session]session变化,前后不一致

jameskaron的专栏 755

HTTP协议分析——状态与会话

会话与会话状态简介 WEB应用中的会话是指一个客户端浏览器与WEB服务器之间连续发生的一系列请求和响应的过程。 WEB应用的会话状态是指WEB服务器与浏览器在会话过程中产生的状态信息,借助会话状态,WEB服务器能把属于同一会话中的一系列请求和响应过程关联起来。 如何实现有状态的会话 HTTP协议是一种无状态的协议,WEB服务器本身不能识别哪些请求是同一个浏览器发出的,浏览器的每一次请求都是完...

携秋水揽星河的博客 1852
上一篇: JavaScript中定时器的两种写法
bug_easy
博客等级 码龄9年 11粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值