CORS请求Request携带Cookie失败占用License解决方案
起因
-
因为是前后端分离的项目,前端使用的vue2,后端iris。需要获取cooike的,每次请求时携带,防止每次请求都占用一个。
-
登录认证,保持会话期间全局变量,超时退出。
现象
下图是如果不携带cookie每次请求都会新建一个并且占用一个license。

解决过程
所以基于上述情况,需要每次获取响应的cookie,保存下来,下次请求再携带保存下来的。
如图Set-Cookie内容:
CSPSESSIONID - 为SessionID的
- - 服务器,负载均衡时会用到,如果不对应,则会报错。
后端方法为%CSP.Response的:
Method WriteHTTPHeaderCookies()
{
#Dim c,cookie,port,cookiepath
s ^yx("yx","UseSessionCookie") = %session.UseSessionCookie
s ^yx("yx","CSPSessionCookie") = %session.CSPSessionCookie
s ^yx("yx","SecureSessionCookie") = %session.SecureSessionCookie
If $isobject($get(%session)),%session.UseSessionCookie,i%OutputSessionToken,%session.CSPSessionCookie'="" {
Set cookie="CSPSESSIONID",cookiepath=i%CookiePath
If $extract(cookiepath,*)'="/" Set cookiepath=cookiepath_"/"
If $data(%request.CgiEnvs("SERVER_PORT"),port) Set cookie=cookie_"-SP-"_port
Set cookie=cookie_"-UP-"_$translate($extract(cookiepath,2,*),"/","-")
Set cookie=cookie_"="_$select(i%OutputSessionToken=2:"",1:%session.CSPSessionCookie)_"; path="_$zcvt($zcvt(cookiepath,"O","UTF8"),"O","URL")_"; "_$select(%session.SecureSessionCookie:" secure;",1:"")
if i%UseHttpOnly {
Set cookie=cookie_" httpOnly;"
}
Write "Set-Cookie: "_cookie,!
$$$SysLogTag(2,"CSPResponse","[WriteHTTPHeaderCookies] Session cookie: "_cookie,"", %request.RequestId)
s ^yx("Set-Cookie:") = cookie
Set %session.CookiePath=$get(cookiepath)
}
Set c=""
For {
Set c=$order(i%Cookies(c)) Quit:c=""
Set name=i%Cookies(c,"n")
Write "Set-Cookie: ",name,"=",i%Cookies(c,"v"),";"
Write:i%Cookies(c,"e")'="" " expires=",i%Cookies(c,"e"),";"
Write:i%Cookies(c,"p")'="" " path=",i%Cookies(c,"p"),";"
Write:i%Cookies(c,"d")'="" " domain=",i%Cookies(c,"d"),";"
Write:i%Cookies(c,"s") " secure;"
Write:i%Cookies(c,"h") " httpOnly;"
Write !
}
}