我有一个使用外部登录服务(OAUTH(进行身份验证的Web应用程序,需要将其重定向到SSO服务器以进行登录。我的问题是在第一次登录浏览器后保存与SSO相关的cookie,第二次剂量不要求用户名密码只需从SSO弹回,从SSO弹跳到主要Web应用程序
我尝试手动删除饼干!但是,当我尝试使用一件代码进行操作时,例如:
foreach (var cookie in Request.Cookies.Keys) Response.Cookies.Delete(cookie);
它也将被删除,但看起来好像已被删除,并且不会要求用户凭证的" Just Just弹回"
看来您的问题不是cookie,该页面是从浏览器缓存加载的第二次。
。您需要禁用index.html页面的浏览器缓存,该页面每次浏览器请求服务器以获取页面时,都会加载新页面。为此,在index.html标头中添加元标记。
<meta http-equiv="Cache-control" content="no-cache, no-store">
<meta http-equiv="Pragma" content="no-cache">
no-cache
和 max-age=0, must-revalidate
表示相同的含义。
(pragma&amp; cache-control是同一件事,但从不同的http规范中。请参阅此处的答案:Pragma和Cache-Control标头之间的区别?(
或者您可以将日期附加到脚本标签中以获取JS
<script src="js/config.js?v="+ new Date() type="text/javascript"></script>
通过在前端发送查询时进行此操作,它将附加新的dateTime,这表明缓存的JS与请求不同,并且防止加载页面的加载版,现在已加载新页面后(不是来自Cache((,将发生验证请求,成功登录后,您的页面将被重定向。
如果您每次在导航上每次加载效果时都担心性能,则必须使用诸如Angular之类的框架,该框架是单页应用程序,因此在重新加载时仅加载一次,并且在导航时继续进行。
- 您可以在index.html或 中添加这些元标记
- 如果后端是IIS服务器,请添加一个Web.config文件(我尚未与其他服务器尝试(
在root web.config中,我们指定我们不想通过设置高速缓存,pragma和expires request eleast eleast标题以及最大值为0。
<location path="index.html">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache" cacheControlMaxAge="0.00:00:00" />
</staticContent>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
<add name="Pragma" value="no-cache" />
<add name="Expires" value="-1" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
有关缓存的更多详细信息检查这些
- iis客户端缓存:https://learn.microsoft.com/en-us/iis/configuration/system.webserver/staticcontent/clientcache
- 缓存控制HTTP标头:https://developer.mozilla.org/en-us/docs/web/http/headers/cache-control
- Pragma HTTP标头:https://developer.mozilla.org/en-us/docs/web/http/headers/pragma
- 到期HTTP标头:https://developer.mozilla.org/en-us/docs/web/http/headers/expires