客户端与服务器间令牌传递及会话管理策略
立即解锁
发布时间: 2025-08-22 01:31:40 阅读量: 2 订阅数: 7 


WebRAD:使用Visual FoxPro构建Web数据库应用
# 客户端与服务器间令牌传递及会话管理策略
## 1. 车牌(License Plates)策略
### 1.1 车牌策略概述
车牌策略是客户端与服务器之间传递令牌的最后一种可选方法。对于开发者而言,这种方法实现起来最为困难,但它能避免其他替代方法的大部分缺点。
当用户访问网站的第一个动态页面时,会被分配一个标识符,即“车牌”。这个标识符会被持久化到用户在应用程序导航过程中遇到的所有后续URL中。例如,若用户到达时被分配了随机标识符“L23891766”,则会将“&lp= L23891766”附加到所有动态生成的URL上。在每个传入请求中,可通过以下代码检查车牌:
```foxpro
THIS.cLicensePlate = Request.QueryString( "lp" )
```
此代码假设已向进程类添加了属性`cLicensePlate`。若没有车牌(表示当前用户首次访问),或其值“过期”(表示会话超时),则需生成一个新的车牌。实际上,`wwSession`类可用于简化车牌策略的实施。
### 1.2 车牌策略的优缺点
| 优点 | 缺点 |
| --- | --- |
| 避免了隐私问题、安全策略和浏览器兼容性等困扰其他三种方法的问题。车牌仅存在于URL的查询字符串和服务器上。即使禁止使用cookie或服务器管理员更改站点使用Windows身份验证,车牌策略仍能正常工作。 | 开发者需要做大量工作。必须确保车牌值在应用程序生成的每个动态链接(包括超链接和表单操作)中都能持久存在。若用户点击了一个没有车牌的链接,会话线程将丢失。 |
| | 如果网站包含应用程序必须链接的静态网页,用户导航到此类页面时车牌会丢失,这可能导致车牌策略无法使用。 |
### 1.3 实施车牌策略
实施车牌策略具有一定挑战性,需要确保车牌“附加”到应用程序生成的每个URL上,包括表单操作和标准超链接。为简化手动操作,可按以下步骤进行:
1. **添加属性和方法到进程类**:
```foxpro
DEFINE CLASS myProcess AS WWC_PROCESS
* Add some properties:
cLicensePlate = ""
cUrlSuffix = ""
```
2. **添加新方法`InitLicensePlateSession`**:
```foxpro
FUNCTION InitLicensePlateSession
LPARAMETERS lcLPName, lnTimeout
LOCAL lcLPId
IF EMPTY(lcLPName)
lcLPName = "LP"
ENDIF
lcLPId = THIS.oRequest.QueryString( m.lcLPName )
THIS.oSession = CREATEOBJECT( [WWC_SESSION] )
IF NOT EMPTY( m.lnTimeout )
THIS.oSession.nSessionTimeout = m.lnTimeout
ENDIF
IF NOT THIS.oSession.IsValidSession( m.lcLPId )
* Pass a Request object reference, so other
* items, such as IP address can be stored in the session.
THIS.oSession.oRequest = THIS.oRequest
lcLPId = THIS.oSession.NewSession()
ENDIF
* Now set license plate properties:
THIS.cLicensePlate = m.lcLPId
* This must be attached to every URL:
THIS.cUrlSuffix = "&" + m.lcLPName + "=" + m.lcLPId
RETURN lcLPId
ENDFUNC && InitLicensePlateSession
```
3. **重写`Process`方法**:
```foxpro
FUNCTION Process
THIS.InitLicensePlateSession()
DODEFAULT()
ENDFUNC && Process
```
完成上述步骤后,车牌机制就已就位。但还需确保将车牌附加到所有URL上,例如:
```foxpro
Response.Write( [<a href="wc.dll?myApp~myPage" title="Go to my page.">] + ;
"[Link to My Page…]" + [</a>] + CR )
```
应改为:
```foxpro
Response.Write( [<a href="wc.dll?myApp~myPage~] + THIS.cUrlSuffix +;
[" title="Go to my page.">] + ;
"[Link to My Page…]" + [</a>] + CR )
```
对于`<form>`标签的`action`属性也需进行类似处理。若要在多个应用程序中部署车牌策略,可创建`wwProcess`的通用子类,并从中派生应用程序类。
### 1.4 车牌策略实施流程
```mermaid
graph TD;
A[用户访问第一个动态页面] --> B[分配车牌标识符];
B --> C[将车牌附加到后续URL];
C --> D[接收请求,检查车牌];
D --> E{车牌是否有效};
E -- 是 --> F[继续处理请求];
E -- 否 --> G[生成新的车牌];
G --> C;
```
## 2. 会话状态管理
### 2.1 会话状态管理概述
选择好客户端与服务器之间传递令牌的方法后,就可以开始管理用户会话的状态。会话状态管理是指在响应一个请求时存储重要操作、值和偏好信息,以便在响应同一用户的后续请求时检索和使用这些信息。这对于设计健壮
0
0
复制全文
相关推荐










