【发布时间】:2014-03-21 07:18:13
【问题描述】:
我遇到了奇怪的情况,我的会话变量在从 PayPal 回来后将其设置为 null 一次。
在我将页面重定向到 PayPal 之前的场景中,我将值分配给会话。
public string sessionToken
{
get
{
if (Session["token"] != null)
{
return Session["token"].ToString();
}
else
return string.Empty;
}
set
{
Session["token"] = value;
}
}
致电贝宝:
bool ret = payPalCaller.ShortcutExpressCheckout(amt, ref token, ref retMsg, ref status);
if (ret)
{
sessionToken = token;
Response.Redirect(retMsg,false);
}
在用户完成 paypal 后(如果用户需要一些时间来完成 txn)并返回成功页面,然后我试图从那里访问上面的会话变量,那么该值是空的。但如果我按 ctrl+f5 几次,它就会获得价值。 这里有什么问题? 在我的开发电脑中,这工作正常,当我托管在服务器中时会出现问题。 (IIS 6)
我的 web config 配置如下:
<configuration>
<location path="RegisterUser.aspx">
<system.web>
<authorization>
<allow users="?" />
</authorization>
<httpRuntime executionTimeout="43200" maxRequestLength="104856" />
<sessionState timeout="3600" mode="InProc" cookieless="false"></sessionState>
<customErrors mode="ON" />
</system.web>
</location>
</configuration>
编辑:
我在Checkout and Payment with PayPal 中使用了类似的代码。我在评论部分发现了这个奇怪的问题,但也没有回复该问题。
【问题讨论】:
-
你有两种方式,一种是你现在做的,将你的用户与他们的cookie和最终付款联系起来。另一种是将变量发送到paypal,并读取这个变量来连接付款的用户。如果您使用与 cookie 连接的会话,那么最好使用 SQL 服务器来保存会话而不是 InProc。使用 sql 会话,您不会丢失它们。
-
不是说这会导致问题,而是 3600 的会话超时似乎有点高?你知道它在几分钟内吗?
-
您的实时服务器上是一台机器,还是多台具有负载平衡功能的机器?尝试将会话存储在数据库中。
标签: asp.net session c#-4.0 paypal