天天看點

session問題和cas單點登入ticket

前言

1、部落客這個禮拜很難受,公司沒什麼活幹,禮拜三說要做一個微信小程式,是以馬上看了下微信小程式怎麼做。學了點皮毛,但是夠用了。

2、關于session,其實之前也不是很了解,但是學了單點登入,突然覺得必須稍微了解一下。

3、之前做過一個Nginx,Tomcat,session共享,當時用了的是一個域名,也就是常見的localhost,當時沒有考慮過一個域名下的session是不是同一個,但是按照教程做完了。通過配置tomcat和項目,最後得到是一個sessionId。其實作在我才知道,如果沒有配置共享session,本來一個localhost,不同端口,如果開啟項目的話,每次重新整理不同的端口項目,session變了。那是因為目前的端口将之前的端口的sessionId被替換掉了。但是之前的端口的sessionId再重新整理的話,就又會變了。

4、接着說sso,我還是用了同一個localhost,發現,單點是可以登入,但是隻能登入一個用戶端。這就偶是3中強調的一個域名session是同一個,如果登入另外一個。通過sso就會将之前的session給幹掉。隻留下目前登入的那個用戶端。我這裡用的是sso使用的是ticket驗證,不可以共用一個sessionId的。

1、一個域名下兩個不同端口的項目,session不能同時存在

以cas用戶端為例,由于兩個項目登入資訊都是存在session中的,但是當我登入一個項目之後,再去登入另一個時,前一個的session就會清空。

2、得到不同的sesion

基于cookie區分路徑、域名、名稱,有三個解決方案。

1、設定域名不同,比如

http://projectA.com:7777/

http://projectB.com:8080/

2、設定路徑不同,設定工程名字,不再映射根路徑,比如

http://ip1:7777/projectA

http://ip1:8080/projectB

3、設定key不同

在Tomcat的server.xml中配置sessionCookieName,隻要兩個不相同就可以

Tomcat server.xml context配置

<Service name="Catalina">
  
		<Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
		
		<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

		<Engine defaultHost="localhost" name="Catalina">

		<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>

		<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">

		<Context path="" docBase="Test1" reloadable="true" sessionCookieName="Test1"/>
      </Host>
    </Engine>
  </Service>
           
session問題和cas單點登入ticket

繼續閱讀