【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();

本文来源:http://www.gdgbn.com/asp/28596/