我希望能夠在Salesforce網站頁面中讀取/寫入當前會話的一些變量。Salesforce會話變量,在會話中設置並獲取變量
我有一個使用Salesforce Sites構建的網站,我需要在所有頁面中存儲/檢索一些值(考慮構建類似於購物車的東西)。 但是我無法找到任何有關如何讀取和寫入會話變量(匿名用戶)的好例子。
我正在使用Visualforce頁面和幾個內置於Apex的控制器。
問候
我希望能夠在Salesforce網站頁面中讀取/寫入當前會話的一些變量。Salesforce會話變量,在會話中設置並獲取變量
我有一個使用Salesforce Sites構建的網站,我需要在所有頁面中存儲/檢索一些值(考慮構建類似於購物車的東西)。 但是我無法找到任何有關如何讀取和寫入會話變量(匿名用戶)的好例子。
我正在使用Visualforce頁面和幾個內置於Apex的控制器。
問候
自定義設置,在應用程序級緩存,也許這就是爲什麼它在鏈接建議以上。我不確定我是否會推薦這種方法,但您可能能夠使其發揮作用。
如果你創建了一個名爲「SessionData」自定義設置,並添加自定義字段(即表示要在會話存儲數據),你可以將數據保存到這樣的:
Database.SaveResult result = Database.insert(new SessionData__c(YourFieldHere='Your value here etc'));
System.debug(result.getID());
然後使用生成的自定義設置ID存儲在cookie中。雖然自定義設置可以使用常規SOQL進行訪問,其優點是數據緩存,可以這樣來訪問:
if (SessionData__c.getAll().containsKey('unique ID from cookie here'))
{
System.debug(SessionData__c.getInstance('unique ID from cookie here').YourFieldHere);
}
請記住,自定義設置並沒有真正專爲這一點,所以你需要定期清除舊的自定義設置數據,就像正常的會話管理系統一樣。
查看Apex Custom Settings documentation瞭解更多詳情。
我想Visualforce View State可能對你有用:包含一個表單組件也包含封裝在頁面視圖狀態的加密,隱藏的表單字段
Visualforce頁面。這個視圖狀態是自動創建的,正如其名稱所暗示的那樣,它保存着包含組件,字段值和控制器狀態的頁面狀態。
不是,我正在尋找可以跨頁面工作的東西,而不是特定於某個頁面。 –
您應該爲此使用Javascript cookies。
你也可以使用Apex cookies,但是你需要確保每個請求都到達服務器(而不是緩存層)。
爲頂點的Cookie,你可以使用下面的代碼:
//Setting Cookie
public void setCookie() {
Cookie userCookie = new Cookie('CookieName', fieldValueToBeStoredAsCookie, null, 315569260, false); //Here 315569260 represents cookie expiry date = 10 years. You can set this to what ever expiry date you want. Read apex docs for more details.
ApexPages.currentPage().setCookies(new Cookie[] {
userCookie
});
}
//Reading Cookie
Cookie cookie = ApexPages.currentPage().getCookies().get('CookieName');
if (cookie != null) {
String fieldValueToBeStoredAsCookie = cookie.getValue();
}
Cookies不安全,我無法在客戶端計算機上存儲保密信息(甚至是加密的) –
如果您有保密信息,則應該對每個用戶進行身份驗證。 –
如果您正在構建像購物車,或「嚮導」,你需要保持控制變量的情況下,從一個頁面瀏覽到另一個,那麼在VisualForce中執行此操作的最佳方法是使用相同的控制器。
當用戶提交表單(通過actionFunctions,commandButtons或commandLinks等),並且您的控制器返回頁面Reference時,如果新的可視化頁面使用相同的控制器,則視圖狀態將被保留。
通過這種方式,您可以讓用戶使用第一頁上的apex:inputField標籤輸入他們的姓名和電子郵件地址。他們導航到第二頁,它使用與第一頁相同的控制器,頁面可以引用相同的控制器變量。基本上,控制器仍然在範圍內,所有更新的變量也是如此。
例子:
第一頁:
<apex:page controller="myController">
Please enter your name <apex:inputText value="{!shopper_name}"/>
<br/>
<apex:commandButton action="{!pageTwo}" value="Click for page two"/>
</apex:page>
第二頁:
<apex:page controller="myController">
You entered: <apex:outputText value="{!shopper_name}" />.
</apex:page>
控制器: HTTP:
public class myController {
public string shopper_name { get; set; }
public myController() {
shopper_name = null;
}
}
我也通過這個問題去// forums.sforce.com/t5/Visualfor ce-Development/Storing-and-Accessing of-Session-variables-in-APex-Page-aswell/mp/153871 使用cookies是不可能的,我想要更安全的地方來存儲值 也使用相同的控制器是不可能的,我懷疑這種解決方案將工作,以防用戶擊中CTRL + F5 –
而我找不到任何關於如何在Apex中爲每個匿名用戶讀/寫自定義設置的例子(如答案中所述)我希望每個用戶的數據只能由他訪問 –
請參閱http://stackoverflow.com/questions/6103363/how-to-get-in-a-visualforce-page-controller-a-value-from-a-custom -component-cont/6104307#6104307 – 2011-10-18 20:14:58