[英]how to delete a cookie in liferay DXP custom theme using freemarker?
我想在我的liferay自定義主題免費標記Templete中刪除Cookie USERID
我正在使用liferay DXP
我嘗試了這段代碼
<#if !is_signed_in>
<#assign aCK=objectUtil("com.liferay.portal.kernel.util.CookieKeys") />
<#assign userID = aCK.getCookie(request,"USERID") />
<#assign VOID=aCK.deleteCookies(request, response,aCK.getDomain(request), "USERID") />
</#if>
</#if>
但是給我空指針異常,因為我有空響應!
有人可以幫助我嘗試這樣做嗎?
更新 :我的主要目的是在以下情況下刪除特定的cookie“ USERID”:
用戶注銷
b-會話超時
for(a)我已經通過實現logoutPostAction掛鈎完成了第一部分(因為注銷操作不會清除cookie,所以我需要手動執行此操作)
對於(b),我嘗試實現sessionDestroyAction掛鈎,但是我沒有請求和響應來僅刪除cookie httpSession
因此,我轉向了會話超時將我重定向到登錄頁面或主頁時刪除cookie的解決方案,因此嘗試在自定義主題中執行此操作。
我希望此更新可以清楚地描述我的問題,並嘗試幫助我如何解決我的問題?
您正在主題中進行一些積極的工作,但是通常認為主題是被動的:它提供了應用程序的外觀,而不提供任何其他業務邏輯。
考慮將修改Cookies的代碼移動到portlet中,然后進入操作階段,此時您可以更改狀態,並且還為時過早,可以將響應標頭寫入結果頁面。 呈現主題后,就不能保證能夠呈現HTTP標頭(您正在嘗試對Cookie進行此操作)。 如果您的freemarker主題到達這些行時,頁面的前幾個字節已經傳遞到瀏覽器,則它們仍然會失敗。 即使它們看起來可以工作,它們也可能僅在負載下失敗,而這在調試此類事件特別困難時。
或者,或者:您實際上是在嘗試什么導致您提出此解決方案? 我看不到使用該解決方案可以解決的問題-如果您提出問題,我們也許可以為您提供解決潛在問題的建議。
編輯:在您編輯的問題B上(似乎可以解決A):在會話期滿時設置cookie:按照規范,這將永遠無效。 因為會話在服務器端到期,而瀏覽器沒有任何請求(這就是為什么您沒有請求和響應對象的原因:瀏覽器可能已離線或半小時前終止-您無法在以下時間訪問它這點)。
如果您的USERID明智,並且在會話結束后一定不能在瀏覽器中顯示:請勿將其存儲在Cookie中。 如果從會話(服務器端)使用if,那么一切就很好了。 您正在追逐一個無法解決的問題。
並且永遠不要僅對cookie值進行操作-始終確保它未被篡改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.