精华内容
下载资源
问答
  • 主要介绍了Java web实现账号单一登录,防止同一账号重复登录,有点类似于qq登录踢人效果,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • web实现注册登录功能源代码,完整代码教程。适合新开发人员练习使用
  • 对于一个帐号在同一时间只能一个人登录,下文给大家介绍的非常详细,对java web qq 登录功能感兴趣的朋友一起看看吧
  • 这是一个简单的web登录注册页面,含有基础的JS登录验证语法,入门级页面源码文件,需要的,自行下载了解。
  • web项目开发中,很多情况下都可以让同一个账号信息在不同的登录入口登录很多次,这样子做的不是很完善。一般解决这种情况有两种解决方案,小编呢主要以第二种方式给大家介绍具体的实现方法,对java web 防止多用户...
  • 移动端web登录界面

    2019-04-19 21:01:49
    几个可以应用在移动端的web登录界面,响应式界面设计。
  • Web单点登录,同一账号同一时间只有一个在线,禁止多用户登录,异地登录后强制退出
  • 通过WEB网管登录 H3C

    2018-03-20 17:32:40
    通过WEB网管登录 H3C 通过WEB网管登录 H3C 通过WEB网管登录 H3C
  • 1.2.具体实现把第一个if()后加else{return ""},不为空就不让登录即可。(具体代码根据具体需求) 3.在第一次登陆的时候把user信息放入session 4.在登出的时候5.总的来说,其实也就是加了唯一标识。通过唯一标识...

    1.2.具体实现把第一个if()后加else{return ""},不为空就不让登录即可。(具体代码根据具体需求)

    3.在第一次登陆的时候把user信息放入session

    4.在登出的时候5.总的来说,其实也就是加了唯一标识。通过唯一标识防止再次登录

    展开全文
  • google 谷歌第三方登录(facebook twitter 登录 第三方登录 web 可以参考,如果是oauth2.0协议 流程都是一样的)
  • 在旧版本的MetaMask中是可以获取到的,因为账号地址默认是公开的,在2018年11月2日后MetaMask做了更新默认情况下不公开任何帐户地址,所以要获取账号地址要先请求用户授权。MetaMask重大更新文档 主要把创建 web3 ...
  • 实现一个登录页面,如果用户复选记住用户名、密码,则下次访问页面时,将会自动在用户名、密码字段填入上次登录时所使用的值。
  • web个人账户管理系统

    2016-03-04 20:51:48
    web个人账户管理系统,绝对实用,只要你的软件版本ok,即使不一样的版本,打开后更改一条代码即可,百度搜索,轻松解决,赶快的吧!
  • 主要介绍了用Python实现web端用户登录和注册功能的教程,需要的朋友可以参考下
  • 源码调用了精易web支持库和精易模块。可以写成登录器,自动写cookies到在配置文件!
  • if ("3187102313".equals(loginName)&&"123456".equals(loginPwd)){ msg = "登录成功,用户名:" +loginName; } else { msg="账号或者密码错误"; } showMsg(resp,msg); } private void showMsg(HttpServletResponse ...
    1. 首先在main文件夹中创建一个java文件夹标记为源码根,在java文件夹内创建一个包,在刚刚创建的包中创建一个名为LoginController的java类。如图所示:

       2.打开pom.xml文件,在<dependencies></dependencies>中插入以下代码:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
     </dependency>

    3.jetty:run运行。运行完之后就可以在我们的外部库看到javax.servlet3.1.0的版本已经载入我们的外部库了,如图所示:

    4.打开我们前面创建的名为LoginController的java类,并重写doGet、doPost方法,以及自构建一个showMsg方法。之后就是写代码了。  

           代码:  

    package cn.edu.mju.project13.controller;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/login")
    public class logincontroller extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            StringBuilder stringBuilder= new StringBuilder();
            stringBuilder.append("<form action='' method='post'>");
            stringBuilder.append("账号:<input type='text' name='loginName' value=''><br>");
            stringBuilder.append("密码:<input type='password' name='loginPwd' value=''><br>");
            stringBuilder.append("<input type='submit' name='submit' value='登录'>");
            stringBuilder.append("<input type='reset' name='reset' value='取消'>");
            stringBuilder.append("</form>");
            showMsg(resp,stringBuilder.toString());
    
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String msg;
            String loginName = req.getParameter("loginName");
            String loginPwd = req.getParameter("loginPwd");;
            if ("3187102313".equals(loginName)&&"123456".equals(loginPwd)){
                msg = "登录成功,用户名:" +loginName;
            }
            else {
                msg="账号或者密码错误";
            }
            showMsg(resp,msg);
        }
        private void showMsg(HttpServletResponse resp,String msg)throws IOException{
            resp.setCharacterEncoding("UTF-8");
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("<html>");
            stringBuilder.append("<header>");
            stringBuilder.append("<title>Project13</title>");
            stringBuilder.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
            stringBuilder.append("</header>");
            stringBuilder.append("<body>");
            stringBuilder.append(msg);
            stringBuilder.append("</body>");
            stringBuilder.append("</html>");
            PrintWriter out= resp.getWriter();
            out.println(stringBuilder.toString());
            out.close();
        }
    }

    5.写完代码,我们就访问http://localhost:9090/Project13/login测试(这里的9090是我的端口号,Project13是我的Context path,而login是映射,这里的账号我设置为3187102313,密码为123456)

    成功:

    失败:

    总结一下:

    ==比较的是指向的对象地址,而equals比较的是对象内容

     

    注:小编能力有限,如果有错,欢迎大家评论修改。

    展开全文
  • 此资源实现安卓APP注册登录功能,通过Android Studio编写界面和相应功能,用Eclipse开启web服务器进行客户端与服务端之间的通信,并且将用户的账户密码经过MD5的加密后存入Mysql数据库中。
  • 最近有点闲时间,联系了一下web前端的一些技术,这里实现的一个登录功能和列表功能
  • 什么是web框架


      我们常用的web前端框架其实简单称呼叫web框架,现阶段web前端技术成熟,从视觉体验到用户体验都是比较好的,这也是从简单到复杂的web前端框架技术实现的,在国内前端技术开发人员也是非常的多,市面上的前端框架可以说是眼花缭乱,这里写这篇文章就是让你在使用不同的前端框架的时候能够明确的知道自己的选择。


    Web前端框架工作原理:

      在我们讨论框架之前,我们需要理解 Web 如何“工作”的。为此,我们将深入挖掘你在浏览器里输入一个 URL 按下 Enter 之后都发生了什么。在你的浏览器中打开一个新的标签,浏览http://www.uileader.com。我们讨论为了显示这个页面,浏览器都做了什么事情(不关心 DNS 查询)。

    Web 服务器

      每个页面都以 HTML 的形式传送到你的浏览器中,HTML 是一种浏览器用来描述页面内容和结构的语言。那些负责发送 HTML 到浏览器的应用称之为“Web 服务器”,会让你迷惑的是,这些应用运行的机器通常也叫做 web 服务器。

      然而,最重要的是要理解,到最后所有的 web 应用要做的事情就是发送 HTML 到浏览器。不管应用的逻辑多么复杂,最终的结果总是将 HTML 发送到浏览器(我故意将应用可以响应像 JSON 或者 CSS 等不同类型的数据忽略掉,因为在概念上是相同的)。

    HTTP

      浏览器从 web 服务器(或者叫应用服务器)上使用 HTTP 协议下载网站,HTTP 协议是基于一种 请求-响应(request-response)模型的。客户端(你的浏览器)从运行在物理机器上的 web 应用请求数据,web 应用反过来对你的浏览器请求进行响应。

      重要的一点是,要记住通信总是由客户端(你的浏览器)发起的,服务器(也就是 web 服务器)没有办法创建一个链接,发送没有经过请求的数据给你的浏览器。如果你从 web 服务器上接收到数据,一定是因为你的浏览器显示地发送了请求。

    HTTP Methods

      在 HTTP 协议中,每条报文都关联方法(method 或者 verb),不同的 HTTP 方法对应客户端可以发送的逻辑上不同类型的请求,反过来也代表了客户端的不同意图。例如,请求一个 web 页面的 HTML,与提交一个表单在逻辑上是不同的,所以这两种行为就需要使用不同的方法。

    HTTP GET

    GET 方法就像其听起来的那样,从 web 服务器上 get(请求)数据。GET 请求是到目前位置最常见的一种 HTTP 请求,在一次 GET 请求过程中,web 应用对请求页面的 HTML 进行响应之外,就不需要做任何事情了。特别的,web 应用在 GET 请求的结果中,不应该改变应用的状态(比如,不能基于 GET 请求创建一个新帐号)。正是因为这个原因,GET 请求通常认为是“安全”的,因为他们不会导致应用的改变。

    HTTP POST

      显然,除了简单的查看页面之外,应该还有更多与网站进行交互的操作。我们也能够向应用发送数据,例如通过表单。为了达到这样的目的,就需要一种不同类型的请求方法:POSTPOST 请求通常携带由用户输入的数据,web 应用收到之后会产生一些行为。通过在表单里输入你的信息登录一个网站,就是 POST 表单的数据给 web 应用的。

      不同于 GET 请求,POST 请求通常会导致应用状态的改变。在我们的例子中,当表单 POST 之后,一个新的账户被创建。不同于 GET 请求,POST 请求不总是生成一个新的 HTML 页面发送到客户端,而是客户端使用响应的响应码(response code)来决定对应用的操作是否成功。

    HTTTP Response Codes

      通常来说,web 服务器返回 200 的响应码,意思是,“我已经完成了你要求我做的事情,一切都正常”。响应码总是一个三位数字的代号,web 应用在每个响应的同时都发送一个这样的代号,表明给定的请求的结果。响应码 200 字面意思是“OK”,是响应一个 GET 请求大多情况下都使用的代号。然而对于 POST 请求, 可能会有 204(“No Content”)发送回来,意思是“一切都正常,但是我不准备向你显示任何东西”。

    Web 应用

      你可以仅仅使用 HTTP GET POST 做很多事情。一个应用程序负责去接收一个 HTTP 请求,同时给以 HTTP 响应,通常包含了请求页面的 HTMLPOST 请求会引起 web 应用做出一些行为,可能是往数据库中添加一条记录这样的。还有很多其它的 HTTP 方法,但是我们目前只关注 GET POST

      那么最简单的 web 应用是什么样的呢?我们可以写一个应用,让它一直监听 80 端口(著名的 HTTP 端口,几乎所有 HTTP 都发送到这个端口上)。一旦它接收到等待的客户端发送的请求连接,然后它就会回复一些简单的 HTML

      下面是程序的代码:

    import socketHOST = ''PORT = 80listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)listen_socket.bind((HOST, PORT))listen_socket.listen(1)connection, address = listen_socket.accept()request = connection.recv(1024)connection.sendall(b"""HTTP/1.1 200 OKContent-type: text/html

    <html>    <body>        <h1>Hello, World!</h1>    </body></html>""")connection.close()

      (如果上面的代码不工作,试着将 PORT 改为类似 8080 这样的端口。)

      这个代码接收简单的链接和简单的请求,不管请求的 URL 是什么,它都会响应 HTTP 200(所以,这不是一个真正意义上的 web 服务器)。Content-type:text/html 行代码的是 header 字段,header 用来提供请求或者响应的元信息。这样,我们就告诉了客户端接下来的数据是 HTML

    请求的剖析

      如果看一下测试上面程序的 HTTP 请求,你会发现它和 HTTP 响应非常类似。第一行<HTTP Method> <URL> <HTTP version>,在这个例子中是 GET / HTTP/1.0。第一行之后就是一些类似Accept: */* 这样的头(意思是我们希望在响应中接收任何内容)。

      我们响应和请求有着类似的第一行,格式是<HTTP version> <HTTP Status-code> <Status-code Reason Phrase>,在外面的例子中是HTTP/1.1 200 OK 。接下来是头部,与请求的头部有着相同的格式。最后是响应的实际包含的内容。注意,这会被解释为一个字符串或者二进制文件, Content-type 头告诉客户端怎样去解释响应。

      解决路由和模板两大问题

      围绕建立 web 应用的所有问题中,两个问题尤其突出:

    1.我们如何将请求的 URL 映射到处理它的代码上?

    2.我们怎样动态地构造请求的 HTML 返回给客户端,HTML 中带有计算得到的值或者从数据库中取出来的信息?

      每个 web 框架都以某种方法来解决这些问题,也有很多不同的解决方案。用例子来说明更容易理解,所以我将针对这些问题讨论 Django Flask 的解决方案。但是,首先我们还需要简单讨论一下 MVC

    Django 中的 MVC

    Django 充分利用 MVC 设计模式。 MVC,也就是 Model-View-Controller (模型-视图-控制器),是一种将应用的不同功能从逻辑上划分开。models 代表的是类似数据库表的资源(与 Python 中用 class 来对真实世界目标建模使用的方法大体相同)。controls 包括应用的业务逻辑,对 models 进行操作。为了动态生成代表页面的 HTML,需要 views 给出所有要动态生成页面的 HTML 的信息。

      在 Django 中有点让人困惑的是,controllers 被称做 views,而 views 被称为 templates。除了名字上的有点奇怪,Django 很好地实现了 MVC 的体系架构。

    Django 中的路由

      路由是处理请求 URL 到负责生成相关的 HTML 的代码之间映射的过程。在简单的情形下,所有的请求都是有相同的代码来处理(就像我们之前的例子那样)。变得稍微复杂一点,每个 URL 对应一个 view function 。举例来说,如果请求 www.foo.com/bar 这样的 URL,调用 handler_bar() 这样的函数来产生响应。我们可以建立这样的映射表,枚举出我们应用支持的所有 URL 与它们相关的函数。

      然而,当 URL 中包含有用的数据,例如资源的 ID(像这样 www.foo.com/users/3/) ,那么这种方法将变得非常臃肿。我们如何将 URL 映射到一个 view 函数,同时如何利用我们想显示 ID 3 的用户?

    Django 的答案是,将 URL 正则表达式映射到可以带参数的 view 函数。例如,我假设匹配^/users/(?P<id>\d+)/$ URL 调用 display_user(id) 这样的函数,这儿参数 id 是正则表达式中匹配的 id。这种方法,任何 /users/<some_number>/ 这样的 URL 都会映射到 display_user 函数。这些正则表达式可以非常复杂,包含关键字和参数。

    Flask 中的路由

    Flask 采取了一点不同的方法。将一个函数和请求的 URL 关联起来的标准方法是通过使用 route() 装饰器。下面是 Flask 代码,在功能上和上面正则表达式方法相同:

    @app.route('/users/<id:int>/')

    def display_user(id):

    # ...

      就像你看到的这样,装饰器使用几乎最简单的正则表达式的形式来将 URL 映射到参数。通过传递给route() URL 中包含的 <name:type> 指令,可以提取到参数。路由像 /info/about_us.html 这样的静态 URL,可以像你预想的这样 @app.route('/info/about_us.html') 处理。

    通过 Templates 产生 HTML

      继续上面的例子,一旦我们有合适的代码映射到正确的 URL,我们如何动态生成 HTML?对于 Django Flask,答案都是通过 HTML Templating

    HTML Templating 和使用 str.format() 类似:需要动态输出值的地方使用占位符填充,这些占位符后来通过 str.format() 函数用参数替换掉。想象一下,整个 web 页面就是一个字符串,用括号标明动态数据的位置,最后再调用 str.format() Django 模板和 Flask 使用的模板引擎 Jinja2 都使用的是这种方法。

      然而,不是所有的模板引擎都能相同的功能。Django 支持在模板里基本的编程,而 Jinja2 只能让你执行特定的代码(不是真正意义上的代码,但也差不多)。Jinja2 可以缓存渲染之后的模板,让接下来具有相同参数的请求可以直接从缓存中返回结果,而不是用再次花大力气渲染。

    数据库交互

    Django 有着“功能齐全”的设计哲学,其中包含了一个 ORM(Object Realational Mapper,对象关系映射)ORM 的目的有两方面:一是将 Python class 与数据库表建立映射,而是剥离出不同数据库引擎直接的差异。没人喜欢 ORM,因为在不同的域之间映射永远不完美,然而这还在承受范围之内。Django 是功能齐全的,而 Flask 是一个微框架,不包括 ORM,尽管它对 SQLAlchemy 兼容性非常好,SQLAlchemy Django ORM 的最大也是唯一的竞争对手。

      内嵌 ORM Django 有能力创建一个功能丰富的 CRUD 应用,从服务器端角度来看,CRUDCreateRead Update Delete)应用非常适合使用 web 框架技术。Django Flask-SQLchemy 可以直接对每个 model 进行不同的 CRUD 操作。

     总结:

      到现在为止,web前端框架的目的应该非常清晰了:向程序员隐藏了处理 HTTP 请求和响应相关的基础代码。至于隐藏多少这取决于不同的框架,Django Flask 走向了两个极端:Django 包括了每种情形,几乎成了它致命的一点;Flask 立足于“微框架”,仅仅实现 web 应用需要的最小功能,其它的不常用的 web 框架任务交由第三方库来完成。

      但是最后要记住的是,Python web 框架都以相同的方式工作的:它们接收 HTTP 请求,分派代码,产生 HTML,创建带有内容的 HTTP 响应。事实上,所有主流的服务器端框架都以这种方式工作的( JavaScript 框架除外)。但愿了解了这些框架的目的,你能够在不同的框架之间选择适合你应用的框架进行开发。

    展开全文
  • 设备B用同账号登录后会判断application里是否已存在用户id作为值的数据,存在则将该值设为“_offline_”。设备A再在请求交互操作后,后端每次会判断SessionID作为键的值是否为“_offline_”,是则弹出该账号在异地登...

    原理:设备A成功登录后,会以当前会话的SessionID作为用户id作为,保存在application(保存在服务器的全局变量,多用户可以共享)变量中。设备B同账号登录后会判断application里是否已存在用户id作为值的数据,存在则将该值设为“_offline_”。设备A再在请求交互操作后,后端每次会判断SessionID作为键的值是否为“_offline_”,是则弹出该账号在异地登录,跳回登录界面。

    后端处理登录的代码(登录在Web API里写的):

    private string loginin(string content)
    {
        string returnStr = "";
        JLogin login = JsonConvert.DeserializeObject<JLogin>(content);
        JHUserBL userBL = new JHUserBL();
        JGetUser user = userBL.IsLogin(login.login_name, login.password);
        if (user != null)
        {
    
            #region 存储登录的SessionID
            HttpContext httpContext = System.Web.HttpContext.Current;
            var userOnline = (Hashtable)httpContext.Application["Online"];
            if (userOnline != null)
            {
                IDictionaryEnumerator enumerator = userOnline.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    if (enumerator.Value != null && enumerator.Value.ToString().Equals(user.id.ToString()))
                    {
                        userOnline[enumerator.Key.ToString()] = "_offline_";
                        break;
                    }
                }
            }
            else
            {
                userOnline = new Hashtable();
            }
            HttpContext.Current.Session.Timeout = 60 * 24;//1天
            userOnline[HttpContext.Current.Session.SessionID] = user.id.ToString();
            httpContext.Application.Lock();
            httpContext.Application["Online"] = userOnline;
            httpContext.Application.UnLock();
            #endregion
    
            returnStr = JsonHelper.RequestSuccess(JsonConvert.SerializeObject(user));
            new JHLogBL().Insert(LogType.login, "用户登录", user.id);
        }
        else
        {
            returnStr = JsonHelper.RequstFail();
        }
        return returnStr;
    }
    

    后端处理异常登录的代码(LoginCheckFilterAttribute.cs下):

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    
    namespace GDSMPlateForm
    {
        public class LoginCheckFilterAttribute:ActionFilterAttribute
        {
            //表示是否检查登录
            public bool IsCheck { get; set; }
            //Action方法执行之前执行此方法
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                base.OnActionExecuting(filterContext);
                if (IsCheck)
                {
                    #region 同一账号登录验证
                    HttpContext httpContext = System.Web.HttpContext.Current;
                    Hashtable userOnline = (Hashtable)httpContext.Application["Online"];
                    if (userOnline != null)
                    {
                        if (userOnline.ContainsKey(httpContext.Session.SessionID))
                        {
                            var value = userOnline[httpContext.Session.SessionID];
                            //判断当前session保存的值是否为被注销值
                            if (value != null && "_offline_".Equals(value))
                            {
                                //验证被注销则清空session
                                userOnline.Remove(httpContext.Session.SessionID);
                                httpContext.Application.Lock();
                                httpContext.Application["online"] = userOnline;
                                httpContext.Application.UnLock();
    
                                HttpCookie cookie = new HttpCookie("failLogin")
                                {
                                    Value = "failLogin",
                                    Expires = DateTime.Now.AddDays(1)
                                };
                                HttpContext.Current.Response.Cookies.Add(cookie);
                                HttpContext.Current.Request.Cookies.Remove("user_id");
                                //string msg = "下线通知:当前账号另一地点登录, 您被迫下线。若非本人操作,您的登录密码很可能已经泄露,请及时改密。";
                                filterContext.HttpContext.Response.Redirect("/");
                            }
                        }
                    }
                    #endregion
    
    
                    string req_method = filterContext.HttpContext.Request.HttpMethod;
    
                    if (req_method.ToLower() != "get" && req_method.ToLower() != "post" && req_method.ToLower() != "head")
                    {
                        GDSMCommon.LogHelper.WriteLog("平台请求方式有错:" + req_method);
                        filterContext.HttpContext.Response.Redirect("/error.html");
                    }
                    if (HttpContext.Current.Request.UrlReferrer != null)
                    {
                        if (HttpContext.Current.Request.Url.Host != HttpContext.Current.Request.UrlReferrer.Host)
                        {
                            GDSMCommon.LogHelper.WriteLog("跨站请求伪造:当前Host:" + HttpContext.Current.Request.Url.Host + ",上一个Host:" + HttpContext.Current.Request.UrlReferrer.Host);
                            filterContext.HttpContext.Response.Redirect("~/error.html");
                        }
                    }
                    string full_url = HttpContext.Current.Request.Url.ToString().ToLower();
                    if (full_url.Contains("content-type") || full_url.Contains("content-transfer-encoding") || full_url.Contains(";") || full_url.Contains("=_"))
                    {
                        GDSMCommon.LogHelper.WriteLog("参数请求错误:" + HttpContext.Current.Request.Url.ToString());
                        filterContext.HttpContext.Response.Redirect("~/error.html");
                    }
                    //else
                    //{
                    //    GD.Common.LogHelper.WriteLog("跨站请求伪造:当前Host:" + HttpContext.Current.Request.Url.Host + ",上一个Host:不存在" );
                    //    filterContext.HttpContext.Response.Redirect("~/error.html");
                    //}
                    string url = HttpContext.Current.Request.Url.AbsolutePath.ToString().ToLower();
                    if (url != "/" && url != "/home/index" && url != "/home/" && url != "/home" && url.Contains("afileupload") == false && url.Contains("classiccase") == false && url.Contains("h5template") == false && url.Contains("registeragree") == false && url.Contains("bannerupload") == false)
                    {
                        校验用户是否已经登录
                        //if (filterContext.HttpContext.Session["UserInfo"] == null)
                        //{
                        //    //跳转到登陆页
                        //    filterContext.HttpContext.Response.Redirect("/?tourl=" + HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString()));
                        //}
    
                        if (HttpContext.Current.Request.Cookies["user_id"] == null)
                        {
    
                            filterContext.HttpContext.Response.Redirect("/?tourl=" + HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString()));
    
                        }
                        else
                        {
                            if (HttpContext.Current.Request.Cookies["user_id"].Value == "")
                            {
                                HttpCookie cookie = HttpContext.Current.Request.Cookies["user_id"];
                                cookie.Expires = DateTime.Now.AddDays(-1);
                                HttpContext.Current.Request.Cookies.Add(cookie);
                                filterContext.HttpContext.Response.Redirect("/?tourl=" + HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString()));
                            }
                        }
                    }
    
                }
            }
        }
    }
    
    

    然后在首页处理重复登录的状态:

    $(function () {
        var failLogin = getCookie("failLogin");
        var user_id = getCookie("user_id");
        if (failLogin != "" && user_id != "") {
            var msg = "下线通知:当前账号另一地点登录, 您被迫下线。若非本人操作,您的登录密码很可能已经泄露,请及时改密。";
            layer.open({
                content: msg,
                end: function () {
                    document.cookie = "failLogin=";
                    delCookie("user_id");
                }
            });
        }
    });
    

    在MVC的WebApi中默认是没有开启Session会话支持的。需要在Global中重写Init方法来指定会话需要支持的类型

    public class WebApiApplication : System.Web.HttpApplication
    {
        public override void Init()
        {
            this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
            base.Init();
        }
    }

    在WebApiConfig中建立建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它,同时Routes.MapHttpRoute要修改为下面的格式

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务
    
            // Web API 路由
            //config.MapHttpAttributeRoutes();
    
            //config.Routes.MapHttpRoute(
            //    name: "DefaultApi",
            //    routeTemplate: "api/{controller}/{id}",
            //    defaults: new { id = RouteParameter.Optional }
            //);
    
            RouteTable.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            ).RouteHandler = new SessionControllerRouteHandler();
        }
    
        public class SessionRouteHandler : HttpControllerHandler, IRequiresSessionState
        {
            public SessionRouteHandler(RouteData routeData)
                : base(routeData)
            {
            }
        }
        public class SessionControllerRouteHandler : HttpControllerRouteHandler
        {
            protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                return new SessionRouteHandler(requestContext.RouteData);
            }
        }
    }
    

    SessionID每次请求一直会变的情况,Global页面下需要添加Session_Start方法

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Http;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    using System.Web.SessionState;
    
    namespace GDSMPlateForm
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure(WebApiConfig.Register);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
    
            void Session_Start(object sender, EventArgs e)
            {
                // Code that runs when a new session is started
    
            }
    
            void Session_End(object sender, EventArgs e)
            {
                // Code that runs when a session ends. 
                // Note: The Session_End event is raised only when the sessionstate mode
                // is set to InProc in the Web.config file. If session mode is set to StateServer 
                // or SQLServer, the event is not raised.
            }
        }
    
        public class WebApiApplication : System.Web.HttpApplication
        {
            public override void Init()
            {
                this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
                base.Init();
            }
    
            void Session_Start(object sender, EventArgs e)
            {
                // Code that runs when a new session is started
    
            }
    
            void Session_End(object sender, EventArgs e)
            {
                // Code that runs when a session ends. 
                // Note: The Session_End event is raised only when the sessionstate mode
                // is set to InProc in the Web.config file. If session mode is set to StateServer 
                // or SQLServer, the event is not raised.
            }
        }
    
    
    }
    

     

    展开全文
  • 这边我们理想是使用localstorage去存取用户登录信息,因为是保存在客户端本地,无需访问服务器,且可实现永久保存,节省网络流量 关于cookie和session和storage的详细解说网址: ... 而登录的当前时间(具体到秒)+...
  • * 浏览器显示什么:图片 * * 利用 response 获取 与客户端的连接输出流, * 此时将产生的图片的字节数据,利用response对象,向浏览器进行输出. * 浏览器,获取到数据后,进行解析.解析成图片 */ ...
  • ![图片说明](https://img-ask.csdn.net/upload/201604/13/1460531795_240122.png) 红色位置打出“账号或密码错误” 要用到什么才能实现? 我之前用url传参数可以 但是 感觉不太好 希望大神来帮我指点一下 谢谢
  • 使用Web登录防火墙设备

    千次阅读 多人点赞 2021-06-16 14:51:26
    Web页面配置: 查看登录名和密码 [FW1]aaa //配置AAA认证 [FW1-aaa]manager-user admin //配置...[FW1-aaa-manager-user-admin]service-type web terminal //允许Web登录 [FW1-aaa-manager-user-admin]level 15
  • openwrt web登录页面的账号固定

    千次阅读 2016-07-02 10:29:17
    luci默认为root,按照下面的方式修改以后就会默认为username。root用户不能录入进去。但是SSH 两者都可以使用了。 ...feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua ...
  • web页面的账户密码认证

    千次阅读 2018-12-11 09:06:35
    web站点 web页面的添加账户认证,需要输入用户名和密码进行访问 在此站点的配置文件中,示例是web虚拟主机,在vhost.conf配置中添加 &lt;Directory "/var/www/html/bbs"&gt; Options Indexes ...
  • Web前端用户注册

    2018-09-11 21:39:52
    登录,注册是我们使用的较多的表单认证,每个项目都从头开始写,显然是没有必要的。下面和大家分享下我所写的表单验证: 下面的代码,会附上完整代码,使用的过程中,只需要根据自己的项目进行简单的修改即可,非常...
  • 一个基于flask的web应用诞生第六篇,这篇文章主要介绍了记录用户账户登录状态功能开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 什么是 Web 3.0?

    千次阅读 多人点赞 2021-11-27 00:23:58
    很多人并不理解什么是 Web 3.0。本文尝试以最简洁的语言来解释一下我对于这个问题的理解。01.互联网范式迭代Web 1.0,也就是第一代互联网,是静态互联网,主要的应用是网络媒体。各...
  • Web技术,制作简易的登录界面

    千次阅读 2019-08-20 20:22:53
    登录界面 首先需要了解登录界面中分为几个部分(分板块后,设置div,方便操作),我们将其分为三个部分 第一步,制定框架: 1.首先在body部分设置出一个div模块,用于在界面中显示出一个登录的界面框; 2.在一级div...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 288,830
精华内容 115,532
关键字:

web登录账号是什么