【原创】基于Memcached 实现用户登录的Demo(附源码)
一个简单的Memcached在Net中运用的一个demo。主要技术 Dapper+MVC+Memcached+sqlserver,
开发工具为vs2015+Sql
效果图如下:

登录后

解决方案

主要实现代码
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using website.Models;
namespace website.Controllers
{
public class LoginController : Controller
{
// GET: Login
BLL.Users service = new BLL.Users();
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Login(string username,string password)
{
int count = ;
try
{
count=service.Count(" where username='"+username+"' and password='"+password+"' "); if (count == )
{
return Json(new { success = false, msg = "用户名或密码不正确" });
}
else
{ var loginUser = service.QueryList(" where username='" + username + "' and password='" + password + "' ").SingleOrDefault(); Guid sessionId = Guid.NewGuid();//申请了一个模拟的GUID:SessionId //把sessionid写到客户端浏览器里
Response.Cookies["sessionId"].Value = sessionId.ToString(); //可以缓存model 也可缓存list
MemcacheHelper.Set(sessionId.ToString(), loginUser, DateTime.Now.AddMinutes());
return Json(new { success = true, msg = "登陆成功" });
}
} catch(Exception ex)
{
return Json(new { success = false, msg = ex.Message }); } } }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Model;
using System.Net.Http;
using website.Models; namespace website.Controllers
{
public class BaseController : Controller
{
BLL.Users service = new BLL.Users(); protected string hostUrl = "";
Users currentuser = new Users(); public ActionResult Layout()
{
Users user = GetCurrentUser();
ViewData["username"] = user.UserName;
ViewData["TrueName"] = user.TrueName;
return View("~/Views/Shared/_MyLayout.cshtml");
// return View();
} /// <summary>
/// Action执行前判断
/// </summary>
/// <param name="filterContext"></param>
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{ base.OnActionExecuting(filterContext); //从cookie中获取登录的sessionId
string sessionId = Request["sessionId"];
if (string.IsNullOrEmpty(sessionId))
{ Response.Redirect("/Login/Index");
} object obj = MemcacheHelper.Get(sessionId); Users user = obj as Users;
if (user == null)
{
Response.Redirect("/Login/Index");
} currentuser = user;
MemcacheHelper.Set(sessionId, user, DateTime.Now.AddMinutes()); } /// <summary>
/// 判断是否登录
/// </summary>
protected bool checkLogin()
{
//HttpCookie _cookie = httpContext.Request.Cookies["CookieUser"];
if (this.Session["userinfo"] == null)
{
return false;
}
return true;
}
/// <summary>
/// 返回当前登录用户
/// </summary>
/// <returns></returns>
protected Users GetCurrentUser()
{
if (checkLogin())
{
currentuser = service.QueryList(" where username='" + this.Session["userinfo"].ToString() + "'").SingleOrDefault();
}
return currentuser;
} }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Memcached.ClientLibrary; namespace website.Models
{
public static class MemcacheHelper
{
private static MemcachedClient mc; static MemcacheHelper()
{
String[] serverlist = { "127.0.0.1:11211" }; // initialize the pool for memcache servers
SockIOPool pool = SockIOPool.GetInstance("test");
pool.SetServers(serverlist);
pool.Initialize();
mc = new MemcachedClient();
mc.PoolName = "test";
mc.EnableCompression = false; } public static bool Set(string key, object value,DateTime expiry){
return mc.Set(key, value, expiry);
} public static object Get(string key)
{
return mc.Get(key);
}
}
}
总结:自己练习的Demo,有很多地方不完善,欢迎指正!!
https://yunpan.cn/c63VD4ekxn78b 访问密码 2f97
【原创】基于Memcached 实现用户登录的Demo(附源码)的更多相关文章
- 一个简单的IM系统(Demo附源码)-- ESFramework 4.0 快速上手(08)
前面的文章已经介绍完了基于ESFramework/ESPlus进行二次开发的所有要点,现在,我们可以开始小试牛刀了. 本文将介绍使用ESFramework的Rapid引擎开发的两个最简单的Demo,E ...
- struts1实现简单的登录功能(附源码)
环境:MyEclipse 14 ...
- 干货——基于Nop的精简版开发框架(附源码)
.NET的开发人员应该都知道这个大名鼎鼎的高质量b2c开源项目-nopCommerce,基于EntityFramework和MVC开发,拥有透明且结构良好的解决方案,同时结合了开源和商业软件的最佳特性 ...
- [原创]Net实现Excel导入导出到数据库(附源码)
关于数据库导出到Excel和SQLServer数据导出到Excel的例子,在博客园有很多的例子,自己根据网上搜集资料,自己做了亦歌简单的demo,现在分享出来供初学者学习交流使用. 一.数据库导入导出 ...
- 基于Python接口自动化测试框架(初级篇)附源码
引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局 ...
- Java:基于AOP的动态数据源切换(附源码)
1 动态数据源的必要性 我们知道,物理服务机的CPU.内存.存储空间.连接数等资源都是有限的,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈.而在复杂的互联网业务场景下,系统流量日益膨 ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 基于Struts2+Hibernate开发小区物业管理系统 附源码
开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mo ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
随机推荐
- 烂泥:U盘安装Centos6.5
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 使用U盘安装Centos6.5,需要以下几个步骤: 1. 制作U盘linux系统 2. 设置服务器BIOS 3. 安装Centos,注意引导分区的安装 ...
- Aptana studio 3前端开发编辑器推荐
直接进入主题,先上图 这就是我Apatana studio 3的默认界面,推荐此工具的原因主要有以下几点: 1.可以集成Emmet,快速编写HTML+CSS,做到效率倍增. 2.Jquery 自动完成 ...
- oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题
一个数据表基本上很难满足我们的查询要求,同时,将所有的数据都保存在一个表格中显然也不是一种好的数据库设计,为了避免数据的冗余,删除.更新异常,我们通常需要建立一张外键表,通过表连接,来获取我们自己想要 ...
- 18 多线程编程 - 《Python 核心编程》
- linux command intro2 vi
vi cusor : 0 : to the beginning of the current line $ : to the end of the current line G : to the la ...
- 谈MongoDB读取连接超时的异常
今天在现场的哥们发来异常,让我解决,错误信息如下: HTTP Status 500 - Read operation to server 192.168.1.110:20001 failed on d ...
- [转]移动web开发中meta标签作用
今天在尝试做移动页面的时候遇到了一个问题,<meta content="telephone=no,email=no" name="format-detection& ...
- HDU 4267 A Simple Problem with Integers --树状数组
题意:给一个序列,操作1:给区间[a,b]中(i-a)%k==0的位置 i 的值都加上val 操作2:查询 i 位置的值 解法:树状数组记录更新值. 由 (i-a)%k == 0 得知 i%k == ...
- SpringMVC 通过post接收form参数或者json参数
springmvc的controller很多都用来提供restful服务,成为多功能action 同一个接口既能够提供给web端,也可以提供给ios以及安卓 @RequestBody 可以把接收到的j ...
- JavaWeb学习----http协议
一.什么是HTTP协议: 1.概念: 客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式(规定客户端和服务器如何 ...