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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Tomcat에 jar 프로젝트를 배포하는 방법 Tomcat에 jar 프로젝트를 배포하는 방법 Apr 21, 2024 am 07:27 AM

Tomcat에 JAR 프로젝트를 배포하려면 다음 단계를 따르세요. Tomcat을 다운로드하고 압축을 풉니다. server.xml 파일을 구성하고 포트 및 프로젝트 배포 경로를 설정합니다. JAR 파일을 지정된 배포 경로에 복사합니다. 톰캣을 시작하세요. 제공된 URL을 사용하여 배포된 프로젝트에 액세스합니다.

Tomcat 서버에 대한 외부 네트워크 액세스를 허용하는 방법 Tomcat 서버에 대한 외부 네트워크 액세스를 허용하는 방법 Apr 21, 2024 am 07:22 AM

Tomcat 서버가 외부 네트워크에 액세스하도록 허용하려면 다음을 수행해야 합니다. 외부 연결을 허용하도록 Tomcat 구성 파일을 수정합니다. Tomcat 서버 포트에 대한 액세스를 허용하는 방화벽 규칙을 추가합니다. Tomcat 서버 공용 IP에 대한 도메인 이름을 가리키는 DNS 레코드를 만듭니다. 선택 사항: 역방향 프록시를 사용하여 보안 및 성능을 향상합니다. 선택 사항: 보안 강화를 위해 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의 관리자 애플리케이션에서 프로젝트를 수동으로 배포합니다. 프로젝트가 배포되면 해당 배포 이름(예: http://localhost:8080/project1)으로 액세스할 수 있습니다.

Tomcat에서 동시 연결 수를 확인하는 방법 Tomcat에서 동시 연결 수를 확인하는 방법 Apr 21, 2024 am 08:12 AM

Tomcat 동시 연결 수를 확인하는 방법: Tomcat Manager 페이지(http://localhost:8080/manager/html)를 방문하여 사용자 이름과 비밀번호를 입력하세요. 페이지 상단에서 동시 연결 수를 보려면 왼쪽 탐색 모음에서 상태->세션을 클릭하세요.

Tomcat 웹사이트의 루트 디렉터리는 어디에 있나요? Tomcat 웹사이트의 루트 디렉터리는 어디에 있나요? Apr 21, 2024 am 09:27 AM

Tomcat 웹사이트 루트 디렉터리는 Tomcat의 webapps 하위 디렉터리에 있으며 웹 애플리케이션 파일, 정적 리소스 및 WEB-INF 디렉터리를 저장하는 데 사용됩니다. Tomcat 구성 파일에서 docBase 속성을 찾아 찾을 수 있습니다.

Tomcat의 포트 번호를 확인하는 방법 Tomcat의 포트 번호를 확인하는 방법 Apr 21, 2024 am 08:00 AM

Tomcat 포트 번호는 server.xml 파일에 있는 <Connector> 요소의 포트 속성을 확인하여 볼 ​​수 있습니다. Tomcat 관리 인터페이스(http://localhost:8080/manager/html)를 방문하여 "상태" 탭을 확인하세요. 명령줄에서 "catalina.sh version"을 실행하고 "Port:" 줄을 확인하세요.

Tomcat에서 서로 다른 포트 번호를 사용하여 두 프로젝트를 실행하는 방법 Tomcat에서 서로 다른 포트 번호를 사용하여 두 프로젝트를 실행하는 방법 Apr 21, 2024 am 09:00 AM

Tomcat 서버에서 다른 포트 번호를 사용하여 프로젝트를 실행하려면 다음 단계가 필요합니다. server.xml 파일을 수정하고 커넥터 요소를 추가하여 포트 번호를 정의합니다. 포트 번호와 연관된 애플리케이션을 정의하려면 Context 요소를 추가하십시오. WAR 파일을 생성하고 해당 디렉터리(webapps 또는 webapps/ROOT)에 배포합니다. 변경 사항을 적용하려면 Tomcat을 다시 시작하세요.

See all articles