session

http、tcp、udp、cookie、session、web 应用之间的无状态和有状态传输

↘锁芯ラ 提交于 2020-04-06 00:03:37
无状态含义 每次的请求都是独立的,即不会受上一次请求状态的影响,也不会影响下一次的请求进程。如http 、udp 、ip均为无状态请求 有状态含义 与无状态请求相对应,上一次的请求成功与否直接影响下一次的请求进程。如tcp 为有状态请求 tcp 有状态请求过程 tcp的三次握手 1、当客户端开始发送请求建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。 2、服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态 3、客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手 SYN:同步序列编号(Synchronize Sequence Numbers) tcp的四次挥手 与tcp的三次握手建立连接对应,tcp的四次挥手就断开连接 1、客户端发送一个FIN,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态 2、服务器端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器端进入CLOSE_WAIT状态 3、服务器端发送一个FIN,用来关闭服务器端到客户端的数据传送

IDEA初步使用MyBatis

时间秒杀一切 提交于 2020-04-05 17:55:00
学习链接: https://www.bilibili.com/video/BV1gs411j7kA?p=2 1.建立java文件 2.加载类路径。mybatis.jar 和 数据库驱动jar File->Project Structure->Modules->Dependencies->右侧加号->1.jar 3.在数据库中建立一张person表 id name age 在src中 建立一个person类 4.通过配置文件将类和表对应起来,在person所在的那个类里面 建立一个 personMapper.xml文件 1)personMapper.xml所在的路径 没有.xml 通过id值 返回值类型 然后里面需要传入的参数的类型 5.在src下面直接建立 conf.xml文件 这里需要用到新建xml文件: 参考链接 https://blog.csdn.net/nba_linshuhao/article/details/82735770?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1 里面有那个url username

如何实现每个页面都判断session

独自空忆成欢 提交于 2020-04-04 10:40:10
//转自https://zhidao.baidu.com/question/437513468055148604.html 方法一:最笨的方法,在每个页面的page_load()方法中判断。 If(Session[“UserId”]!=null) { //登陆成功的情况 } Else { //response.write(“<script>alter(‘请登陆’);</script>”); } 这种方法在每个页面都需要写入重复的代码。代码冗余 方法二:可以在HttpModule中判断,在HttpModule中注册请求管道的AcquireRequestState 事件(可以拿到session的那个事件) 步奏: 1:新建一个继承IHttpModule接口的类Module 2:让Module类实现接口成员。 3:在Init()方法中对Context进行注册AcquireRequestState事件(在这个事件中可以拿到Session) 4:在方法中写 void context_AcquireRequestState(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; if (app.Context.Session["userId"] == null) { app.Response

7.1 变量

徘徊边缘 提交于 2020-04-04 09:52:03
分类 一、系统变量 说明:变量由系统提供的,不用自定义 说明:MySQL的session和global一般使用在终端,用来对配置进行暂时设置,当数据库服务重启就会失效。session和global体现在新的设置生效的范围。 session:当前会话,也就是当前连接。 global:全局,不包含当前连接,之后新获取的连接都会生效。 语法: ①查看系统变量 show 【global|session 】variables like ''; 如果没有显式声明global还是session,则默认是session ②查看指定的系统变量的值 select @@【global|session】.变量名; 如果没有显式声明global还是session,则默认是session ③为系统变量赋值 方式一: set 【global|session 】 变量名=值; 如果没有显式声明global还是session,则默认是session 方式二: set @@global.变量名=值; set @@变量名=值; 1、全局变量 服务器层面上的,必须拥有super权限才能为系统变量赋值,作用域为整个服务器,也就是针对于所有连接(会话)有效 2、会话变量 服务器为每一个连接的客户端都提供了系统变量,作用域为当前的连接(会话) 二、自定义变量 说明: 1、用户变量 作用域 : 针对于当前连接(会话)生效 位置

什么是 JWT -- JSON WEB TOKEN

末鹿安然 提交于 2020-04-04 09:34:04
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准( (RFC 7519 ).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。 起源 说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。 传统的session认证 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证。 但是这种基于session的认证使应用本身很难得到扩展,随着不同客户端用户的增加,独立的服务器已无法承载更多的用户,而这时候基于session认证应用的问题就会暴露出来.

【2017-05-21】WebForm内置对象:Session、Cookie,登录和状态保持

谁说我不能喝 提交于 2020-04-03 23:41:30
1、Request -获取请求对象 string s =Request["key"]; 2、Response - 响应请求对象 Response.Redirect("url"); 服务端重定向,在当前页面跳转。 Response.Write("string"); 将此字符串输出到页面的最顶端,里面可以放Js。 3、Session 存贮在服务端,占用服务器内存 很好用,速度很快 不要滥用,容易溢出 生命周期:20分钟,每一次新的请求都会刷新这个时间 浏览器一旦关闭,那么会断开此条Session的连接 Session里面能存储Object类型 (1)、传值: string s=TextBox1.Text; Session["aaa"]=s; Response.Redirect("url"); (2)、取值: Label1.Text= Session["aaa"].Tostring(); (3)、 如果报错:未将对象引用设置到对象的实例。 存贮在服务端,占用服务器内存 。浏览器一旦关闭,那么会断开此条Session的连接 处理办法:在取值时进行判断 if(Session["aaa"]!=null) { Label1.Text= Session["aaa"].Tostring(); } (4)、如果传一个对象的话: 赋值:Users u= new Users(); u.UserName=

如何正确的杀死Oracle Job

十年热恋 提交于 2020-04-03 17:09:00
如何正确的杀死Oracle Job 杀Session是最直接最有效的方式,但是记得一定要加immediate,否则你要等Oracle自己回收Session时,你的job才能彻底死,你肯定不相等,也等不起 alter system kill session '980,33237' immediate; 有同学说杀掉Session后,过一会job自己又启动了,那是因为你的job又到了执行的时间点,例如你设置的job每5分钟执行一次,你现在给他杀了,过5分钟,它自己就又运行了。如果希望它不在运行,job的enabled就不要勾选。 如果你已经按照网上各种攻略杀了一遍,并且 在select * from dba_jobs_running中找不到了 在session里也找不到这个session了 但是你在plsql developer中的runing job里还能看到它活着 那么来这里查一查 select * from v$scheduler_running_jobs; 一看,它依然活着,你再试试 begin DBMS_JOB.BROKEN(2877536,true); commit; end; 结果 ORA-23421:job number 2877536 is not a jon in the job queye alter system kill session '980,33237'

selenium-webdriver(python) (十四) -- webdriver原理

此生再无相见时 提交于 2020-04-03 17:04:21
selenium-webdriver(python) (十四) -- webdriver原理 2013-08-22 12:55 by 虫师, 13926 阅读, 12 评论, 收藏 , 编辑 之前看乙醇视频中提到, selenium 的 ruby 实现有一个小后门,在代码中加上 $DEBUG=1 ,再运行脚本的过程中,就可以看到客户端请求的信息与服务器端返回的数据;觉得这个功能很强大,可以帮助理解 webdriver 的运行原理。 后来查了半天, python 并没有提供这样一个方便的后门,不过我们可以通过代理的方式获得这些交互信息; 一、 需要安装 java 虚拟机与selenium-server-standalone ,参考 《 selenium + python自动化测试环境搭建 》第 7 、 8 操作: 二、 通过下面命令启动服务: C:\selenium>java -jar selenium-server-standalone-2.33.0.jar 在命令结尾加 >d:\log.txt 可以将命令信息存入文件,但信息很少。 然后运行下面的自动化脚本: #coding = utf-8 import time from selenium import webdriver from selenium.webdriver.common.desired_capabilities

socket.io 入门教程

妖精的绣舞 提交于 2020-04-03 17:01:15
转载自: http://deadhorse.me/nodejs/2011/12/29/socket.io_induction.html socket.io socket.io 是一个以实现跨浏览器、跨平台的实时应用为目的的项目。针对不同的浏览器版本或者不同客户端会做自动降级处理,选择合适的实现方式(websocket, long pull..),隐藏实现只暴露统一的接口。可以让应用只关注于业务层面上。 nodejs服务器端安装:npm install socket.io 安装之后就可以require模块来使用了: var sio = require('socket.io'); 在客户端的话,可以通过 <script src="/socket.io/socket.io.js"></script> 或者引用socket.io的CDN服务。 <script src="http://cdn.socket.io/stable/socket.io.js"></script> 在它的官方网站上有各种用法的介绍。 实际使用 这个项目是搭建在connect之上的,因此需要在connect上使用socket.io,同时,因为编辑文件有权限限制,因此还需要在socket.io中使用session和一些其他的连接信息来确认权限。 先看一下socket.io的使用, 服务端: var io =

使用NHibernate 3.2实现Repository(ORuM)(十二)Repository、LINQ

一世执手 提交于 2020-04-03 14:34:08
接NHibernate 3.2实现Repository(ORuM)前文 使用NHibernate-->NHibernate.Linq-->Linq,结合NHibernate和LINQ的优势,使Repository的对象持久化和对象查询两方面兼优,实现了鱼和熊掌兼得。 使用LINQ重构Repository 修改Repository接口,使用LINQ减少方法,查询方法只有Query<TEntity>()。 using System;using System.Collections.Generic;using System.Linq;namespace MVCQuick.Framework.Repository{ public interface IRepository : IDisposable { void Save<TEntity>(TEntity entity) where TEntity : EntityBase; void Update<TEntity>(TEntity entity) where TEntity : EntityBase; void SaveOrUpdate<TEntity>(TEntity entity) where TEntity : EntityBase; void Delete<TEntity>(TEntity entity) where