Transfer、Execute与session、cookie、viewstate与Encode、Decode区别

本文深入解析ASP.NET中ViewState和Cookie的工作原理,包括它们如何存储和传递页面状态信息,以及各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

1.       Transfer:第一个页面直接调用第二个页面,执行完第二个页面后不再返回第一个页面,立即响应到客户端浏览器

 

2.       Execute:第一个页面直接调用第二个页面,执行完第二个页面后再返回第一个页面执行,最后响应到客户端浏览器

 

3.       HtmlEncode:将html字符串不翻译

 

4.       HtmlDecode:将html字符串翻译

 

5.       UrlEncode:将中文翻译为特殊字符

 

6.       UrlDecode:将中文不翻译

 

7.       Aspx最终会生成一个类,这个类继承自Aspx.cs

 

8.       ViewState不能存储所有的数据类型,仅支持:string,int,bool,array,arraylist,hashtable

 

9.       使用viewstate的前提:页面上必须有一个服务器端窗体标记即runat=server

 

10.    ViewState机制:服务器在接收到用户请求一个页面后,会自动在请求报文中找看是否包含_Viewstate的隐藏域,如果有,则将中间的值解码后添加到页面的Viewstate属性中;

 

11.    服务器在输出的时候,也会自动的将viewstate中的值添加到表单里名叫_viewstate的隐藏域中。

 

12.    Viewstate缺点:加大网站的流量,降低访问速度

 

13.    Viewstate原理:回答input版本(Textbox)不受影响,div版本受影响,因为input的value不依靠viewstate

 

14.    Viewstate原理:input、hidden标签以name为key,以value为值提交到服务器,viewstate在hidden标签定义了格式的数据,把value的状态放在viewstate,把这个viewstate提交到服务器,就记住了上次页面的状态,因为有这个就有了事件模型,就有了点击button就可以写事件

 

15.    Cookie原理:

A.      第一次get请求无cookie

B.      服务器通过响应报文头里的set-cookie向浏览器设置cookie信息

C.      浏览器通过请求报文头里的cookie传递到浏览器存储的cookie信息

 

16  cookie缺点:不能保存过多信息,不能保存机密数据,只能保存string类型

 

17  session可以保存任意数据类型,因为保存在服务器端

 

18  session原理:用户提交登录信息,如果登录成功,则将用户信息保存到session中,并返回一个包含此sessionId的cookie到浏览器缓存中

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 Session 的实战应用场景及实现方式 #### 1. 用户登录状态保持 为了维持用户的登录状态,在用户成功验证身份后,服务器会创建一个 `Session` 并分配唯一的 `Session ID` 给该用户。此 `Session ID` 存储在一个名为 `JSESSIONID` 或者自定义名称的 `Cookie` 中发送给客户端浏览器。 每当用户访问受保护资源时,浏览器自动附带这个 `Cookie` 向服务器发起请求。服务器接收到带有有效 `Session ID` 的请求后,便能识别出这是已认证过的合法用户[^5]。 ```python from flask import Flask, request, make_response, redirect, url_for, session app = Flask(__name__) app.secret_key = 'your_secret_key' @app.route('/login', methods=['POST']) def login(): username = request.form['username'] password = request.form['password'] if validate_user(username, password): # 假设有一个函数用来校验用户名密码 response = make_response(redirect(url_for('dashboard'))) session['user'] = username # 将用户信息存入session return response return "Invalid credentials", 401 ``` #### 2. 购物车功能 当顾客浏览商品并将某些物品加入购物篮时,这些选择会被记录下来直到结账为止。此时可以利用 `Cookie` 来临时保存所选的商品列表;而一旦进入结算流程,则应转为使用 `Session` 来确保数据的安全性和一致性[^3]。 ```javascript // 使用 JavaScript 设置 cookie 来暂存购物项 function addToCart(item) { let cartItems = JSON.parse(document.cookie.replace(/(?:(?:^|.*;\s*)cart\s*\=\s*([^;]*).*$)|^.*$/, '$1')) || []; if (!cartItems.includes(item)) { cartItems.push(item); document.cookie = `cart=${JSON.stringify(cartItems)}; path=/`; } } ``` #### 3. 访问统计和个人化服务 网站可以通过设置持久化的 `Cookie` 来追踪访客的行为模式,比如偏好设置、历史记录等。这有助于提供个性化的体验和服务建议。然而涉及到敏感个人信息的操作还是应该交由更安全可靠的 `Session` 处理[^2]。 ```php <?php // PHP 示例:更新用户最后活动时间戳至数据库,并刷新其对应的 session 数据 $lastActivityTime = time(); $_SESSION['last_activity_time'] = $lastActivityTime; $stmt = $pdo->prepare("UPDATE users SET last_activity_at=:time WHERE id=:id"); $stmt->execute([':time' => date('Y-m-d H:i:s', $lastActivityTime), ':id' => $_SESSION['user_id']]); ?> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值