簡體   English   中英

如何使用freemarker刪除liferay DXP自定義主題中的cookie?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM