while(i < pLen) //遍历整个字符串
{ //如果是英文直接复制就可以
if( *(pText + i) >= 0) {
rst[j++] = pText[i++];
}
else{ //是汉字,进行UTF-8转换
WCHAR pbuffer;
::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED, pText+i,2, &pbuffer,1);
UnicodeToUTF_8(buf,&pbuffer);
unsigned short int tmp = 0;
tmp = rst[j] = buf[0];
tmp = rst[j+1] = buf[1];
tmp = rst[j+2] = buf[2];
j += 3;
i += 2;
}
}
(4) 权限控制
如果数据有权限要求,需要设计权限管理模块。系统需要根据用户的权限提供分级的设备数据,或者决定哪些用户具有控制设备参数的权限。用户通过浏览器登录,提供身份验证信息,如提供用户名、密码信息,然后Web服务器判断权限,回应用户浏览器一个惟一的会话ID,这个ID由Web服务器按照自己定义的规则生成,并标志这次会话的权限,而且,Web服务器在服务器端保存这个会话ID的状态。客户端也需要保持会话状态,客户端保持此次会话状态可以采用以下方法:
1)cookie机制。在交互过程中浏览器可以自动地按照HTTP协议把这个标识发送给服务器。默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果希望浏览器将该cookie存储在磁盘上,则需要使用maxAge设置失效时间,并给出一个以秒为单位的时间。将最大时效设为0,则是命令浏览器删除该cookie[2]。
2)URL重写。由于cookie可以被人为地禁止,所以经常使用这种技术,就是把session ID附加在URL路径的后面。对所有的URL使用URL重写,包括超链接,form的action和重定向的URL。每个引用你的站点的URL,以及那些返回给用户的URL(即使通过间接手段,比如服务器重定向中的Location字段)都要添加额外的信息。这种机制较为麻烦,每个页面都需要做成动态页面,可以使用JSP或者ASP实现。
3)表单隐藏字段技术。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session ID传递回服务器。只有每个页面都有表单提交而且动态生成时,才能使用这种方法。常规地点击<A HREF..>超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程。 会话级别cookie较为方便,所以在本系统中,使用会话级别cookie来实现权限认证,不过客户端浏览器需要允许cookie功能。Web服务端判断用户信息后设置客户端cookie,即一个唯一的session ID[5]。session ID可以简单地使用自动递增的整形,如果需要更安全,则可以设计一定的算法来产生,让session ID难以被猜测。Web服务端同时建立会话权限表,设置这个session ID的产生时间,并根据用户信息设置此session ID对应的权限。客户浏览器访问时,Web服务器端通过搜索HTTP请求中“Cookie:”来获取此会话ID,并同自己保存的权限表进行比较,有权限则可以进行后面的操作,而且刷新服务端会话产生时间。服务器端有个会话有失效时间,假设为n分钟。如果客户端浏览器n分钟没有访问,权限表的此会话ID项会被销毁。权限表设计为三个字段如表1所示。
|