session|web
如何应用Session开发非Web终端
协议s
— 作者 sunggsun @ 20:27
Session(会话)是Web上较为有效的信息交互手段。因其使用方便、稳定、安全可靠而被众多Web开发者所青睐。尤其在互联网身份认证、网上电子购物等方面的应用更为广泛。无独有偶,笔者在开发一个财政项目的数据中心平台时,觉得数据传送部分的身份认证和信息交互与Web领域的Session控制极其相似。于是就想尝试一下这新技术,通过查阅大量资料后觉得在非Web客户端用Session进行信息交互也切实可行。经过反复测试成功后应用于项目中,成效显著,省去了较多的临时数据保存以及繁锁的状态检测,由Session自动维持状态。
好东西不能独享,笔者想把这次成功应用Session控制进行非Web开发的关键技术点讲述一下,来共同探讨。我们知道Cookie是Web上最常用的跟踪用户会话方式,当Cookie被禁止后,一般都用URL重写来跟踪会话。那么Cookie到底是什么东西呢?按照定义:Cookie是一种由服务器发送给客户的片段信息,存储在客户环境中,并且在客户所有的对服务器的请求中都要发回它。举个例子说,当我们用IE登录某个电子购物商城时,IE在得到商品列表页面的同时还收到Set-Cookie应答头信息。这个信息的格式为“Set-Cookie:NAME=VALUE;Comment=COMMENT;Domain=DOMAINNMAE;Max-age=SECONDS;Path=PATH;secure;Version=1*DIGIT”,其中NAME值对(值对间用分号分隔)是必须的,其余都是可选的。最重要的信息当然也在所必须的值对里了,VALUE是NAME的值,也是这个Cookie的标识,Max-age定义了Cookie的最长生存时间,其它几个可选值对可参阅http://www.faqs.org/rfcs/rfc2109.html。当我们选购了某种商品,向服务器发送选购清单时,会自动在你的请求信息头里加上NAME值对,如果Cookie被禁止,则用URL重写方式在URL请求地址上附加NAME值对。当Web服务器收到这个请求后,会检查该Cookie是否存在,然后相应的跟踪会话。从以上分析不难理解,其实Web服务器跟踪会话就靠Set-Cookie头信息,跟踪NAME值对进行身份验证。假如我们用非Web终端接收Web服务器的响应信息,从中解析出Cookie头信息,当再次向Web服务器发送请求时附加上解析出的Cookie信息,Web服务器据此不就可以进行身份认证了吗?
有了上面的分析,我们写出代码也非常方便了。下面是笔者用C++Builder 6应用程序与Apache Tomcat 4.0服务引擎中的Servlet交互的演示代码,仅作参考。
C++客户端在初次向服务器发请求时的代码如下:
TIdHTTP *HTTPClient = new TIdHTTP(NULL);
TIdHeaderList * hList;
String URL= "http://localhost:8080/Rev/servlet/test";
try
{
try
{
HTTPClient->Get(URL);
if (HTTPClient->Response != NULL)
{
hList = HTTPClient->Response->ExtraHeaders;
String cookie = hList->Values["Set-Cookie"];
int pos = cookie.Pos(";");
if (pos > 0)
Session_ID = cookie.SubString(1,pos-1);
else
Session_ID = cookie;
}
} catch(Exception& E)
{
}
} __finally
{
HTTPClient->Free();
}
上面代码中变量URL指向所在Servlet的HTTP地址,根据各自情况赋值;变量Session_ID为全局变量,记录Cookie。下次交互时只需在HTTPClient请求前加上“HTTPClient->Request->ExtraHeaders->Add("Cookie:" + Session_ID);”,Apache Tomcat就会自动判别有效性了。简单吗?
Servlet服务端的有效性验证也比较容易,具体的Cookie认证过程就让Apach Tomcat引擎去做了,如下所示:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=GBK");
PrintWriter out = response.getWriter();
out.println("");
out.println("
out.println("");
HttpSession session = request.getSession(false);
if (session != null) {
out.println("
身份确认
");} else {
out.println("
认证失败
");}
out.println("");
}
代码中最关键的是“request.getSession(false);”,参数为true时Apache Tomcat建立一个新的Session;参数为false时Apache Tomcat会根据request中的信息寻找相关联的Session。所以想要维持Session的持续性,必须用参数false调用,但如果长时间没调用该Session,Apache Tomcat为合理利用资源会自动使该Session无效,有关Apache Tomcat的管理机制及其配置可参考http://jakarta.apache.org/。
演示代码中用了C++Builder自带的TIdHTTP组件,该组件严格按照HTTP规范实现,Delphi中也有该组件,Visual C++也有类似的MFC,可根据各自熟悉的开发平台调试,调试时必须把用于认证的Servlet程序加载到Apach Tomcat上,并重新启动Apach Tomcat。以上代码只供演示而已,要实际应用还需增加各种异常处理和HTTPClient的Request请求包以及Servlet的Response响应包的处理,有兴趣的朋友可通过Email:21cnDeveloper@163.com与笔者进一步交流。
![修复:谷歌浏览器请求太多错误 429 [已解决]](https://img.php.cn/upload/article/000/887/227/168160812385289.png)
近期很多Windows用户反映,当他们尝试访问某个URL时,PC上的GoogleChrome浏览器显示错误429。这是因为每次用户尝试在短时间内通过浏览器。通常,此错误是由网站生成的,以避免通过向服务器发送过多请求而被机器人或黑客入侵病毒。用户对在这个阶段可以做什么感到困惑,并因此感到失望。导致此错误的因素可能很多,我们在下面列出了其中一些因素。缓存内存和其他站点数据未清除从第三方来源安装的扩展系统上的一些有害软件病毒攻击在研究了上面列出的因素之后,我们在这篇文章中收集了一些修复程序,这

如果您在Windows10或11PC上遇到语法问题,本文将帮助您解决此问题。Grammarly是最流行的打字助手之一,用于修复语法、拼写、清晰度等。它已经成为写作专业人士必不可少的一部分。但是,如果它不能正常工作,它可能是一个非常令人沮丧的体验。许多Windows用户报告说此工具在他们的计算机上运行不佳。我们做了深入的分析,找到了这个问题的原因和解决方案。为什么Grammarly无法在我的PC上运行?由于几个常见原因,PC上的Grammarly可能无法正常工作。它包括以下内

许多Windows用户最近在尝试访问GoogleChrome浏览器中的网站URL时遇到了一个不寻常的错误,称为Roblox403禁止错误。即使在多次重新启动Chrome应用程序后,他们也无能为力。此错误可能有几个潜在原因,我们在下面概述并列出了其中一些。Chrome的浏览历史和其他缓存以及损坏的数据不稳定的互联网连接网站网址不正确从第三方来源安装的扩展在考虑了上述所有方面之后,我们提出了一些修复程序,可以帮助用户解决此问题。如果您遇到同样的问题,请查看本文中的解决方案。修复1

前言cookie使用最多的地方想必是保存用户的账号与密码,可以避免用户每次登录时都要重新输入1.vue中cookie的安装在终端中输入命令npminstallvue-cookies--save,即可安装cookies,安装之后在main.js文件中写下以下代码import{createApp}from'vue'importVueCookiesfrom'vue-cookies'constapp=createApp(App)app.co

每个网站都通过创建cookie使用户更容易浏览他们的网页和浏览他们的网站。然而,网站创建了一些第三方cookie,使他们能够跟踪访问其他网站的用户,以便更好地了解他们,从而有助于展示广告和其他帖子。一些用户可能认为他们的数据遭到破坏或存在安全风险,而另一些用户可能认为允许这些第三方cookie跟踪他们以在浏览器上获取更多内容是很好的。所以我们在这篇文章中解释了如何在谷歌浏览器中启用或禁用第三方cookies,详细步骤如下。如何在GoogleChrome中启用第三方Cookie如果您认为要

在互联网应用开发中,使用Cookie是常见的一种方式来维护用户会话状态。在PHP语言中,处理Cookie的相关功能在语言的核心库中得到了完善的支持,在最新的PHP8.0版本中,Cookie库得到了进一步的增强。一、PHP中的CookieCookie是一个小文本文件,可以存储在用户的浏览器中,它通常被用来记录用户的个性化设置、登录状态等信息。Cookie是基

php curl设置cookie的方法:1、创建PHP示例文件;2、通过“curl_setopt”函数设置cURL传输选项;3、在CURL中传递cookie即可。

随着互联网技术的不断发展,越来越多的网站需要用户登录才能使用其功能。但是每次用户访问时都需要输入账号密码显然很不方便,因此“记住我”的功能应运而生。本文将介绍如何在ThinkPHP6中采用Cookie技术实现记住我功能。一、Cookie简介Cookie是一种服务器向客户端发送的小文件,在用户访问网站时存储在用户的计算机上。这些文件包含与用户相关的信息,如登录


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),