首頁 php教程 php手册 如何应用Session开发非Web终端

如何应用Session开发非Web终端

Jun 21, 2016 am 09:15 AM
cookie httpclient quot session tomcat

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与笔者进一步交流。



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
tomcat如何部署jar項目 tomcat如何部署jar項目 Apr 21, 2024 am 07:27 AM

若要將 JAR 專案部署到 Tomcat,請遵循以下步驟:下載並解壓縮 Tomcat。配置 server.xml 文件,設定連接埠和專案部署路徑。將 JAR 檔案複製到指定的部署路徑中。啟動 Tomcat。使用提供的 URL 存取已部署的項目。

tomcat伺服器怎麼能讓外網訪問 tomcat伺服器怎麼能讓外網訪問 Apr 21, 2024 am 07:22 AM

要讓 Tomcat 伺服器對外網訪問,需要:修改 Tomcat 設定文件,允許外部連接。新增防火牆規則,允許存取 Tomcat 伺服器連接埠。建立 DNS 記錄,將網域名稱指向 Tomcat 伺服器公有 IP。可選:使用反向代理提升安全性和效能。可選:設定 HTTPS 以提高安全性。

tomcat安裝目錄在哪裡 tomcat安裝目錄在哪裡 Apr 21, 2024 am 07:48 AM

Tomcat 安裝目錄:預設路徑:Windows:C:\Program Files\Apache Software Foundation\Tomcat 9.0macOS:/Library/Tomcat/Tomcat 9.0Linux:/opt/tomcat/tomcat9自訂路徑:安裝時可指定。尋找安裝目錄:使用 whereis 或 locate 指令。

tomcat怎麼部署多個項目 tomcat怎麼部署多個項目 Apr 21, 2024 am 09:33 AM

要透過 Tomcat 部署多個項目,需要建立每個專案的 webapp 目錄,然後:自動部署:將 webapp 目錄放置在 Tomcat 的 webapps 目錄中。手動部署:在 Tomcat 的 manager 應用程式中手動部署專案。專案部署後,可以透過其部署名稱訪問,例如:http://localhost:8080/project1。

tomcat並發連線數怎麼查看 tomcat並發連線數怎麼查看 Apr 21, 2024 am 08:12 AM

查看Tomcat並發連線數的方法:造訪Tomcat Manager頁面(http://localhost:8080/manager/html),輸入使用者名稱和密碼。在左側導覽列中點選Status->Sessions,即可在頁面頂部看到並發連線數。

tomcat網站根目錄在哪裡 tomcat網站根目錄在哪裡 Apr 21, 2024 am 09:27 AM

Tomcat 網站根目錄位於 Tomcat 的 webapps 子目錄中,用於儲存 Web 應用程式檔案、靜態資源和 WEB-INF 目錄;它可以透過尋找 Tomcat 設定檔中的 docBase 屬性來找到。

tomcat的連接埠號碼怎麼看 tomcat的連接埠號碼怎麼看 Apr 21, 2024 am 08:00 AM

Tomcat埠號碼可透過以下方法檢視:檢查server.xml檔案中的<Connector>元素的port屬性。造訪Tomcat管理介面(http://localhost:8080/manager/html)並查看"Status"標籤。在命令列中運行"catalina.sh version"並查看"Port:"行。

tomcat怎麼配置域名 tomcat怎麼配置域名 Apr 21, 2024 am 09:52 AM

若要設定 Tomcat 使用域名,請執行下列步驟:建立伺服器.xml 備份。開啟 server.xml 並加入 Host 元素,將 example.com 替換為你的網域。為網域名稱建立 SSL 憑證(如果需要)。在 server.xml 中新增 SSL 連接器,變更連接埠、金鑰庫檔案和密碼。保存 server.xml。重新啟動 Tomcat。

See all articles