我希望能够在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