• [原创] .net webservice 登录后 才可以访问其它的方法 2种方法


    1.使用SoapHeader

    1)定义一个类

    public class WSSoapHeader : System.Web.Services.Protocols.SoapHeader
       {
           private string _userName;

           public string UserName
           {
               get { return _userName; }
               set { _userName = value; }
           }

           private string _password;

           public string Password
           {
               get { return _password; }
               set { _password = value; }
           }
       }

    2)Webservice文件

    public class WebserviceDemo : System.Web.Services.WebService

    {

         public WSSoapHeader myHeader = new WSSoapHeader();

        

         [WebMethod]

         [System.Web.Services.Protocols.SoapHeader("myHeader")]

         public string Helloword()

         {

                if (!(myHeader.UserName == “user” && myHeader.Password == “123”))
                {
                    return "login false";
                }

         }

    }

    这个方法,  对于.net客户端调用, 没什么问题, 对于其它语言的, 那就不知道了....

    2. 自己想的办法, 不知道怎么样. 随便说来.

    基本的思想是: 如果登录成功的话,  保存客户端的IP(这里可以用MAC什么的都可以, 只要是客户端唯一标记就可以了)到Cache里(Cache可以放用户名,密码什么的都可以).
    面的Action里去读取Cache里是否有指定的IP的信息. 如果有就是登录成功,如果没有就是没有登录. 
    调用完Action可以把Cache里的这个Key为该IP的删除, 这样就可以防止一次登录就一直连接.

    (想: 这里也可以给Cache设置一个过期时间. 这样一次登录后面就可以不用再调用登录接口了, 可能会出现接口调用一半又不能用了. 所有还是觉得每次都要登录一下.)

    [WebMethod]
    public string CheckLogin(string username, string pwd)
    {
        if (username == "123" && pwd == "123")
        {
            string ip = GetUserIP();

            CCD.WebCache.Insert(ip, Guid.NewGuid().ToString());

            return ip;
        }
        else
        {
            return "login fail.";
        }
    }

    public string GetUserIP()
    {
        string userIP;
        if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] == null)
        {
            userIP = HttpContext.Current.Request.UserHostAddress;
        }
        else
        {
            userIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        }
        return userIP;
    }

    [WebMethod]
            public string Action()
            {
                if (CCD.WebCache.Get(GetUserIP()).ToString()!="")
                {
                    CCD.WebCache.Remove(GetUserIP());
                    return "登录成功";
                }
                else
                {
                    return "登录失败";
                }
            }

    个人觉得 用这种方法 比较好一些 , 什么语言都可以这样的思想来开发,  什么语言调用的时候也没有障碍.

    有哪里不对的请大家多多指点, 谈论, 谢谢.

  • 相关阅读:
    python使用pip离线安装库
    centos 6.5 ftp服务配置及客户端使用
    centos7 ntp服务器配置
    Python:如何排序(sort)
    python报OperationalError: (1366, "Incorrect string value..."的问题解决
    使用matplotlib画双纵轴坐标
    python安装PIL库
    【干货分享】前端面试知识点锦集04(Others篇)——附答案
    【干货分享】前端面试知识点锦集03(JavaScript篇)——附答案
    【干货分享】前端面试知识点锦集02(CSS篇)——附答案
  • 原文地址:https://www.cnblogs.com/chencidi/p/2251961.html
Copyright © 2020-2023  润新知