Symbian HTTP的cookie处理

什么是Session, 什么是Cookie?

Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该 SessionID为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页 面时,会将这一SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么 Session也会失效。

Cookie是客户端的存储空间,由浏览器来维持。


可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。

    实质上 URL 重写是通过向 URL 连接添加参数,并把 session ID 作为值包含在连接中。然而,为使这生效,你需要为你的 servlet 响应部分的每个连接添加 session ID.

Wap中如何进行Session管理?

Wap与PC不同之处在与Wap1.x不支持Session与Cookie,Wap2.0虽然支持但是只有协议支持还是不行,还要看手机终端支不支 持?所以我们的解决方法就是完全不依赖Wap协议,完全不依赖手机终端,使用Url重写进行Session的维护,这个方法只与服务器端有关.

2.6.2     COOKIE规范  
  1. COOKIE一般情况下存放在用户的手机上,若用户手机不支持COOKIE功能,则WAP网关将协助存储用户COOKIE信息;  
  2. COOKIE可分为永久性COOKIE和暂时性COOKIE,通过手机与WAP网关的配合,两种COOKIE均可实现,可根据业务的需求选择使用;  
  3. 暂时性COOKIE的保存时间一般是1小时,可根据业务的需要自行指定;  
  4. 在游戏、社区类业务中,涉及用户身份识别的信息应使用永久性COOKIE;  
   
 ------移动梦网WAP业务规范(V2.0)  
hdr.SetFieldL(iSession.StringPool().StringF(HTTP::ECookie,
RHTTPSession::GetTable()), iCookieData);

读取cookiess 2rd
------------------------- read and save cookie from HTTP response HEADER ------------------

RHTTPHeaders aCurrentHeader;
aCurrentHeader = aResponse.GetHeaderCollection();

// 2. ------- set the RStringF string to get header field data --//

RStringF setcookie = iSession.StringPool().StringF(HTTP::ESetCookie,
RHTTPSession::GetTable());

// 3. ------- get the cookie raw data ---------------------------//

TInt ifcookie = aCurrentHeader.GetField(setcookie,0,iCookieData); //( THTTPHdrVal iCookieData;)

 


--------------------------
添加cookies

void CHTTPEngine::AddCookie(RHTTPHeaders aHeaders)
{
if(iCookie_name.Length() >0 && iCookie_value.Length() > 0)
{
RStringPool string_pool = iSession.StringPool();
RStringF cookie_rsf = string_pool.StringF(HTTP::ECookie,RHTTPSession::GetTable());
THTTPHdrVal field_value;
field_value.SetStrF (cookie_rsf);
aHeaders.SetFieldL(cookie_rsf, field_value);

THTTPHdrVal cookie_hdr;
RStringF cookie_name_rsf = string_pool.StringF(HTTP::ECookieName,RHTTPSession::GetTable());
RString name = string_pool.OpenStringL (iCookie_name);
cookie_hdr.SetStrF (name);
aHeaders.SetParamL (cookie_rsf, cookie_name_rsf, cookie_hdr, 0);
name.Close();

RStringF cookie_value_rsf = string_pool.StringF(HTTP::ECookieValue,RHTTPSession::GetTable());
RStringF value = string_pool.OpenFStringL (iCookie_value);
cookie_hdr.SetStrF (value);
aHeaders.SetParamL (cookie_rsf, cookie_value_rsf, cookie_hdr, 0);
value.Close();
}
}

 

void WriteCookie(RH TTPHeaders headers,TBuf<KMaxHeaderNameLen> _my_cookie_name,TBuf<KMaxHeaderValueLen> _my_cookie_value)
{

TBuf8<KMaxHeaderNameLen> my_cookie_name;
TBuf8<KMaxHeaderValueLen> my_cookie_value;

my_cookie_name.Copy(_my_cookie_name);
my_cookie_value.Copy(_my_cookie_value);
RStringPool string_pool = iSession.StringPool();

RStringF cookie_rsf = string_pool.StringF(HTTP::ECookie,RHTTPSession::GetTable());
THTTPHdrVal field_value;
field_value.SetStrF (cookie_rsf);
headers.SetFieldL(cookie_rsf, field_value);

THTTPHdrVal cookie_hdr;
RStringF cookie_name_rsf = string_pool.StringF(HTTP::ECookieName,RHTTPSession::GetTable());

RString name = string_pool.OpenStringL (my_cookie_name);
cookie_hdr.SetStr (name);
headers.SetParamL (cookie_rsf, cookie_name_rsf, cookie_hdr, 0);
name.Close();
RStringF cookie_value_rsf = string_pool.StringF(HTTP::ECookieValue,RHTTPSession::GetTable());
RString value = string_pool.OpenStringL (my_cookie_value);
cookie_hdr.SetStr (value);
headers.SetParamL (cookie_rsf, cookie_value_rsf, cookie_hdr, 0);
value.Close();
my_cookie_name.Zero();
my_cookie_value.Zero();

}

 


To read a single cookie name and value from incoming headers:

HBufC8* my_cookie_name;
HBufC8* my_cookie_value;

RHTTPResponse resp = aTransaction.Response();
RHTTPHeaders headers = resp.GetHeaderCollection();
RStringPool string_pool = iSession.StringPool();


{
RStringF set_cookie_rsf = string_pool.StringF(HTTP::ESetCookie, RHTTPSession::GetTable());
THTTPHdrVal field_value;
if (headers.GetField(set_cookie_rsf, 0, field_value) == KErrNone)
{
RStringF cookie_rsf = string_pool.StringF(HTTP::ECookie, RHTTPSession::GetTable());

if (field_value.StrF() == cookie_rsf)
{
RStringF cookie_value_rsf = string_pool.StringF(HTTP::ECookieValue, RHTTPSession::GetTable());
RStringF cookie_name_rsf = string_pool.StringF(HTTP::ECookieName, RHTTPSession::GetTable());
THTTPHdrVal cookie_hdr;
if (!headers.GetParam(set_cookie_rsf, cookie_value_rsf, cookie_hdr))
{
RStringF rsf = string_pool.StringF(cookie_hdr.StrF());
my_cookie_value = rsf.DesC().AllocL();
}
if (!headers.GetParam(set_cookie_rsf, cookie_name_rsf, cookie_hdr))
{
RStringF rsf = string_pool.StringF(cookie_hdr.StrF());
my_cookie_name = rsf.DesC().AllocL();
}
}
}
}

 


To write a single cookie name and parameter into outgoing headers:

RStringPool string_pool = iSession.StringPool();

RStringF cookie_rsf = string_pool.StringF(HTTP::ECookie,RHTTPSession::GetTable());
THTTPHdrVal field_value;
field_value.SetStrF (cookie_rsf);
headers.SetFieldL(cookie_rsf, field_value);

THTTPHdrVal cookie_hdr;
RStringF cookie_name_rsf = string_pool.StringF(HTTP::ECookieName,RHTTPSession::GetTable());
RStringF name = string_pool.OpenFStringL (*my_cookie_name);
cookie_hdr.SetStrF (name);
headers.SetParamL (cookie_rsf, cookie_name_rsf, cookie_hdr, 0);

RStringF cookie_value_rsf = string_pool.StringF(HTTP::ECookieValue,RHTTPSession::GetTable());
RStringF value = string_pool.OpenFStringL (*my_cookie_value);
cookie_hdr.SetStrF (value);
headers.SetParamL (cookie_rsf, cookie_value_rsf, cookie_hdr, 0);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值