cookie and session

javaweb之:Cookie机制

1.学习Cookie和Session的原因?

1.Http协议本身是无状态的,即 多次请求之间不会保存任何的状态信息。但是实际开发中,很多时候需要多次请求之间传递信息。就需要学习保持会话的技术.cookie和session都是用来保持会话技术。

2.Cookie机制?

javax.servlet.http.Cookie:类 唯一一个JAVAWEB中我们可以new
1.Cookie:曲奇饼,小饼干。是由服务器传递给客户端的一小撮儿字符串信息。保存在客户端浏览器中(内存/硬盘), 稍后再次访问该服务器时,把Cookie信息回送到服务器上。
Cookie只能是文本信息。 最大不超过4K

2.如何发送cookie:[Server--->Client]
	1.Cookie信息通过 response.addCookie(new Cookie(key,value)),这个方法的底层是通过添加HTTP响应头的方式把cookie信息从服务器传送给客户端。
	
3.如何返回cookie:[Client===>Server]
	当再次访问该服务器时,Cookie信息保存到HTTP请求头中,回送给服务器。我们在服务器上(Servlet/Controller等。)通过request.getCookies()获得本次请求携带的上一次服务器发送客户端的Cookie信息。
	
4.Cookie是唯一一个我们可以new的对象,必须我们new,可以设置过期时间setMaxAge(秒为单位),如果不设置 maxage,则保存在内存中。

3.案例:

1.记住我 记住用户名

2.上次访问时间

3.最近浏览的商品 

Session机制

1.Session机制的原理
0.session表示会话。以一般一个会话包含多个请求。

1.Session机制的核心API:javax.servlet.http.HttpSession接口

2.当客户端第一次访问服务器,并且服务器执行request.getSession()方法时,服务器会在服务器内存中创建一个HttpSession类型的对象,然后给该对象分配一个唯一标识sessionid.以cookie的形式把sessionid返回给客户端浏览器。保存到浏览器内存中。
setAttribute(key,value);登录==session.setAttribute("user",user)
内存购物车 

3.当再一次访问该服务器时,sessionid以cookie的形式返回给服务器。服务器根据sessionid,到内存中找到session对象,获得内容。
2.session的会话失效的情况?
1.session有一个默认有效时间 ,默认1800秒。

2.invalidate 方法被调用。session立即失效 ==》注销/退出

3.关闭浏览器。浏览器关闭---》内存释放--》sessionid没了--》服务器不能根据sessionid找到原来session对象了,只能给新的。
  1. Session中一般存放哪些数据?
1.一个页面需要用到的数据:request:setAttribute/getAttribute()

2.多个页面需要展示的数据:session:setAttribute()/getAttribute()

3.所有人共同使用的数据:application==ServletContex:setAttribute()/getAttribute()

域 范围

3.Cookie和Session的区别?

1.Cookie的对象 程序猿自己new,Session对象 服务器构造。

2.Cookie信息存放在客户端浏览器。Session对象存放在服务器内存。

联系:session机制实现的过程中,使用到了cookie,sessionid
以下是使用cookie跟踪session的示例代码: ```python from flask import Flask, request, make_response app = Flask(__name__) # 设置一个随机的密钥作为cookie的加密密钥 app.secret_key = 'random_secret_key' @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': # 获取用户提交的用户名和密码 username = request.form['username'] password = request.form['password'] # 验证用户名和密码是否正确 if username == 'admin' and password == 'password': # 如果验证通过,设置session变量 session['username'] = username return 'Logged in successfully!' else: return 'Invalid username or password' # 如果是GET请求,返回登录页面 return ''' <form method="post"> <p><input type="text" name="username"></p> <p><input type="password" name="password"></p> <p><input type="submit" value="Login"></p> </form> ''' @app.route('/profile') def profile(): # 检查session变量是否存在 if 'username' in session: return 'Hello, ' + session['username'] + '!' else: return 'You are not logged in' @app.route('/logout') def logout(): # 删除session变量 session.pop('username', None) return 'Logged out successfully!' # 设置cookie的过期时间为1小时 @app.before_request def make_session_permanent(): session.permanent = True app.permanent_session_lifetime = timedelta(hours=1) if __name__ == '__main__': app.run() ``` 在这个示例中,我们使用Flask框架来处理HTTP请求和响应。当用户登录时,我们设置了一个名为`username`的session变量,它存储用户的用户名。我们还设置了一个cookie,它包含了加密后的session ID,以便在后续的请求中识别用户。使用`session.pop()`函数可以删除session变量并在用户注销时从cookie中删除session ID。我们还使用了`before_request`钩子来设置cookie的过期时间,以便在一段时间后自动注销用户。 请注意,在实际应用中,您需要更加精细地控制cookiesession的设置,以确保系统的安全性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值