http无状态连接之我是如何认出你?

参考网:https://www.jianshu.com/p/de91281a1b55
众所周知,http的连接是无状态的。

HTTP无状态协议是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

通俗一点讲就是你每次请求服务器的时候,它并不知道你是谁,但实际上现在的网站并不是这样的。因为它们使用了cookiesession来辅助服务器记住你是谁,简单来讲这两者就是你进入这个网站的钥匙。关于cookie和session的具体内容和差别,可以去找度娘聊聊。

参考网址:https://blog.youkuaiyun.com/yanghaitao_1990/article/details/51723066

Session:

基本介绍:
用于保存每个用户的专用信息。每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) 。它的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右)。Session中的信息保存在Web服务器内容中,保存的数据量可大可小。当 Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择

工作原理:
(1)当有Session启动时,服务器生成一个唯一值,称为Session ID(好像是通过取进程ID的方式取得的)。
(2)然后,服务器开辟一块内存,对应于该Session ID。
(3)服务器再将该Session ID写入浏览器的cookie。
(4)服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放改内存块。
(5)当浏览器连入IIS时并请求的ASP内用到Session时,IIS就读浏览器Cookie中的Session ID。
(6)然后,服务检查该Session ID所对应的内存是否有效。
(7)如果有效,就读出内存中的值。
(8)如果无效,就建立新的Session。

Cookie:

基本介绍:
用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性

参考网址:https://www.jianshu.com/p/de91281a1b55

做网站开发的时候并没有设置cookie啊,那是怎么识别用户的呢?
其实在你首次登陆某个网站的,没有任何cookie的时候(首次登陆或者清除),服务器会给你返回一个自生成的id(tomcat默认的叫JSESSIONID,百度的叫BAIDUID,简书的叫_session_id,当然每个都可能不一样,这个是可以自定义的)cookie值写入你的浏览器。那这个sessionid(以下都会这么叫)就是你进入网站的钥匙(ps:如果你的浏览器禁止或未启用cookie功能,那么这个值就会以某种形式传递)。当你登陆的时候,请求会携带这个cookie值传入后台。

http无状态连接之我是如何认出你?

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识------------称为sessionid,如果已包含则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。之后的每次访问都会携带上这个sessionid,然后查找对应的session和session中的值,服务器进行登陆判断和权限判断。

关闭浏览器、长时间没有请求服务器、注销登陆,这个时候服务器会把该sessionid从内存中清除掉,这个时候如果我们再去请求服务器,sessionid已经不存在了,所以服务器并没有在内存中找到对应的 sessionid,所以会再产生一个新的sessionid,这个时候一般我们又要再登录一次。

细心的同学会发现,那么是不是意味着,如果我拿到了你这个sessionid我就可以冒充你来访问这个网站了?没有错,如果网站没有很好的防护,确实可以这么做。具体怎么实现我这就不太方便说了,感兴趣也可以度娘cookie窃取欺骗和攻击。

所以请各位同学保护好自己的cookie,不要轻易被偷窃走哦。

补充一点:文中的sessionid是服务器端用来识别客户端,也就是知道是哪个客户端发来的数据,响应给哪个客户端。而我们关注这个客户端是哪个用户在使用,所以需要在服务器端生成标识哪个用户的session,以便做相应处理。

### 树莓派 MT9V034 摄像头配置和使用 #### 配置环境准备 对于树莓派上的非官方摄像头模块,如MT9V034,在开始之前需确认操作系统已更新至最新状态。这可以通过运行以下命令来完成: ```bash sudo apt-get update && sudo apt-get upgrade -y ``` #### 安装必要的软件包和支持工具 由于MT9V034并非树莓派官方支持的CSI接口摄像头,因此可能无法通过简单的`/etc/modules`文件添加`bcm2835-v4l2`的方式使其正常工作[^2]。相反,通常需要安装特定于该型号摄像头的支持库或驱动程序。 如果MT9V034是基于USB连接,则可以直接尝试识别并测试其基本功能。如果是通过CSI接口连接,则更复杂一些,因为这类摄像头往往依赖制造商提供的专用驱动程序。此时建议访问摄像头供应商网站查找适用于Raspberry Pi平台的具体指导文档或开源项目资源。 #### 使用 V4L2 工具检测设备 无论采用哪种方式接入,都可以先利用Linux下的Video4Linux2 (V4L2) API来进行初步验证。具体操作如下所示: 1. **查询可用视频设备** 执行命令查看是否有对应的视频输入源被正确挂载 ```bash v4l2-ctl --list-devices ``` 2. **获取当前参数** 如果能看到新加入的摄像机条目,那么就可以进一步探索它的属性了。 ```bash v4l2-ctl --all /dev/videoX # X代表具体的编号 ``` #### 编写Python脚本读取图像数据 假设已经成功让系统认出了这个外设,下面给出一段简单例子展示怎样借助OpenCV框架抓拍静态照片: ```python import cv2 cap = cv2.VideoCapture(0) if not cap.isOpened(): print("Error opening video stream or file") while True: ret, frame = cap.read() if ret: gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('Frame', gray_frame) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break cv2.destroyAllWindows() cap.release() ``` 这段代码实现了打开默认摄像头采集实时画面,并将其转换成灰度模式显示出来直到按下键盘上的'Q'键为止的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值