【www.gdgbn.com--Silverlight】
由于silverlight是客户端,不能够支持session,但我们有时确实需要使用这个session,比如通过asp教程.net登录页面登陆,记录下session后,我现在想在silverlight中使用这个session,有朋友想到可以用url参数传值,假如这个session表示权限管理的一种,用url传至是很危险的,这里给大家一个解决办法,虽然不是绝对安全,但是我们可以通过加密方式确保其最大安全。
silverlight可以调用js函数,我们就在宿主页面的js函数里返回session值。
宿主页面js函数:
function prompt() {
<%session["user"]="swk"; %>;//定义session
return "<%=session["user"].tostring() %>";//返回session
}
再来看看silverlight如何使用这个session:
scriptobject urivirtual = htmlpage.window.getproperty("prompt") as scriptobject;
messagebox.show(urivirtual.invokeself().tostring());//将回去到的值输出
为了更好的体现应用下在看代码
目的
在 sl中使用session 并且,保持高效!
实验方案:
silverlight + asp.net教程 + session + wcf
代码
sessionproxy.svc 类
// 注意: 如果更改此处的类名 "sessionproxy",也必须更新 web.config 中对 "sessionproxy" 的引用。
[aspnetcompatibilityrequirements(requirementsmode = aspnetcompatibilityrequirementsmode.allowed)]
public class sessionproxy : isessionproxy
{
public void dowork()
{
}
//读取session
public object getsessionvariable(string key)
{
return system.web.httpcontext.current.session[key];
}//实现对session的修改操作
public object setsessionvariablevalue(string key)
{
return system.web.httpcontext.current.session[key];
}// 实现session的添加操作
public void addsessionvariable(string key, object value)
{
system.web.httpcontext.current.session[key] = value;
}// 实现session的删除操作
public void removesessionvariable(string key, object value)
{
system.web.httpcontext.current.session.remove(key);
}
}
接口类:
测试代码:
string username = "";
if(webdisaster.lib.tool.sessionmanager.session.containskey("username"))
username=webdisaster.lib.tool.sessionmanager.session["username"].tostring();
p.getsessionvariableasync("username");
p.getsessionvariablecompleted += (sender1, e1) =>
{
if(e1.result!=null)
username = e1.result.tostring();
};
webdisaster.login loginwin=new webdisaster.login();
loginwin.show();