本程序功能是使用Session将用户输入的用户名保存在Session中(登录成功情况下,登录失败不会有Session值),其它页面想访问时会先判断是否有之前存的Session值。

登录Login.htm页面:

<head>
<title></title>
<script type="text/javascript">
//刷新验证码
function refreshYZM() {
var imgYZM = document.getElementById("imgYZM");
imgYZM.src = "YanZhengMa.ashx?t="+new Date();
}
</script>
</head>
<body>
<form action="Login.ashx" method="post">
<table>
<tr><td>用户名</td><td><input type="text" name="username" /></td></tr>
<tr><td>密码</td><td><input type="password" name="password" /></td></tr>
<tr>
<td>
<img src="YanZhengMa.ashx" id="imgYZM" onclick="refreshYZM()" />
</td><td><input type="text" name="yzm" />
</td>
</tr>
<tr><td><input type="submit" name="btnLogin" value="登录" /></td><td>@msg</td></tr>
</table>
</form>
</body>
</html>

生成验证码YanZhengMa.ashx:

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
Random rand = new Random();
int num = rand.Next(, );//生成4位随机数
string code = num.ToString();
context.Session[Login.YZM] = code;
using (Bitmap bmp = new Bitmap(, ))
{
using (Graphics g = Graphics.FromImage(bmp))
using (Font font = new Font(FontFamily.GenericSerif, ))
{
g.DrawString(code, font, Brushes.Red, new PointF(, ));
}
bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
}

登录Login.ashx页在(必须实现IRequiresSessionState接口,在using System.Data.SqlClient;命名空间下):

public const string YZM = "YZM";//存储验证码
public const string LOGINUSERNAME = "LoginUserName";//将登录用户名存到Session,供多个页面访问
public const string LOGINURL = "LoginUrl";//尝试登录的时候的页面地址 public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
string btnLogin = context.Request["btnLogin"];//获取点击按钮
string html = CommonHelper.ReadHtml("~/Login.htm");//获取Login.htm页面内容
if (string.IsNullOrEmpty(btnLogin))//判断按钮是否点击
{
html = html.Replace("@msg", "");
context.Response.Write(html);
}
else
{
string yzm = context.Request["yzm"];//获取用户输入的验证码
string yzmInServer = (string)context.Session[YZM];//获取服务器的验证码
if (yzm != yzmInServer)//判断用户输入与服务器的验证码
{
html = html.Replace("@msg","<font color=red>验证验错误</font>");
context.Response.Write(html);
return;
}
string username = context.Request["username"];
string password = context.Request["password"];
int r = (int)SQLHelper.ExecuteScalar("select count(*) from Users where name=@name and password=@password",
new SqlParameter { ParameterName = "@name", Value = username },
new SqlParameter { ParameterName = "@password", Value = password });
if (r <= )
{
html = html.Replace("@msg", "<font color=red>用户名或密码错误</font>");
context.Response.Write(html);
return;
}
else
{
//如果登录成功
context.Session[LOGINUSERNAME] = username;//把当前登录的用户名写到Session中
//获取上一次访问网址的Session值,在QueryYuE.ashx和ChangePassword.ashx中已作判断,
//当没登录时,就设置Session值"LOGINURL"为要访问的页面
string navUrl = (string)context.Session[LOGINURL];
if (navUrl != null)
{
context.Response.Redirect(navUrl);//重定向回到上一次访问的页面,动态获取
}
else
{
context.Response.Write("看,美丽的图片。。。。。");
}
} }
}

修改密码ChangePassword.ashx(须实现IRequiresSessionState):

public void ProcessRequest(HttpContext context)
{
string username = (string)context.Session[Login.LOGINUSERNAME];//获取登录时存入的Session值
if (username == null)//如果没登录强制性的访问此页面,则重定向到登陆页面
{
context.Session[Login.LOGINURL] = context.Request.Url.ToString();//把当前地址存到Session中
context.Response.Redirect("Login.ashx");
}
else
{
context.Response.Write("修改密码。。。,当前登录用户<a href='Loginout.ashx'>退出登录</a>" + username);
}
}

余额查询QueryYuE.ashx(须实现IRequiresSessionState):

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
string username = (string)context.Session[Login.LOGINUSERNAME];
if (username == null)//如果没登录强制性的访问此页面,则重定向到登陆页面
{
context.Session[Login.LOGINURL] = context.Request.Url.ToString();//把当前地址存到Session中
context.Response.Redirect("Login.ashx");
}
else
{
context.Response.Write("查询余额。。。,当前登录用户。<a href='Loginout.ashx'>退出登录</a>" + username);
}
}

退出登录Loginout.ashx(须实现IRequiresSessionState):

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
context.Session.Abandon();//销毁Session
context.Response.Redirect("Login.ashx");
}

帮助类CommonHelper.cs:

public class CommonHelper
{
public static string ReadHtml(string path)
{
string fillPath = HttpContext.Current.Server.MapPath(path);
string html = File.ReadAllText(fillPath);
return html;
}
}

Session的使用(登录例案+其它页面访问)的更多相关文章

  1. session过期返回登录页面跳出frame

    session 过期返回登录页面 方法1, HttpSession session = request.getSession(); String LOGIN_ID = (String) session ...

  2. struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)

    需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转 实现: java文件:SessionIterceptor.ja ...

  3. session过期,登录页面嵌套问题解决

    项目主页是框架模式时,如果登录后长时间没有活动(操作),存储在session中的登录信息过期了,这时再去进行操作时,就会出现登录页面嵌套的问题,怎么解决呢? 这里介绍一种方法,只需要加上一段javas ...

  4. session失效后跳转到登陆页面

    一.编写Filter拦截器类 package com.pv.utils; import java.io.IOException; import java.io.PrintWriter; import ...

  5. 如何实现登录、URL和页面按钮的访问控制?

    用户权限管理一般是对用户页面.按钮的访问权限管理.Shiro框架是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理,对于Shiro的介绍这里就不多说.本篇博客主要是了解Shiro的 ...

  6. 权限管理系统之集成Shiro实现登录、url和页面按钮的访问控制

    用户权限管理一般是对用户页面.按钮的访问权限管理.Shiro框架是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理,对于Shiro的介绍这里就不多说.本篇博客主要是了解Shiro的 ...

  7. .net MVC使用Session验证用户登录(转载)

    .net MVC使用Session验证用户登录   用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问 ...

  8. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  9. springMVC+request.session实现用户登录和访问权限控制

    用springmvc mybatis实现用户登录登出功能,使用session保持登录状态,并实现禁止未登录的用户访问.感谢谷歌资源,在这里做个学习记录加深自己的印象. 原文在我的https://my. ...

随机推荐

  1. Bzoj1115 石子游戏Kam

    这是道权限题,差评. 题目说明引自ZYF-ZYF Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证 ...

  2. Codeforces 46D Parking Lot

    传送门 D. Parking Lot time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. 写给iOS程序员的命令行使用秘籍

    http://www.jianshu.com/p/44d3b8f713f2 Mac OS是Unix系统的分支,有着强大的命令行功能.很多事情在命令行下处理会事半功倍,所以我就iOS程序员可能会用到的功 ...

  4. Ext.Net学习笔记24:在ASP.NET MVC中使用Ext.Net

    在前面的笔记中已经介绍了如何在ASP.NET WebForm中使用Ext.Net,由于这个系列一直在WebForm中使用,所以并没有涉及到ASP.NET MVC中的用法. 如果你要在ASP.NET M ...

  5. java中静态属性和和静态方法的继承问题 以及多态的实质

    首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成的,不需继承机制就可以调用如果子类里 ...

  6. tmux 快捷键

    ctrl+b , 修改窗口名称 ctrl+b ' 快速按名字切换窗口 ctrl+b w 列出窗口列表 Ctrl+b 激活控制台:此时以下按键生效 系统操作 ? 列出所有快捷键:按q返回 d 脱离当前会 ...

  7. 利用Arraylist输入学生的成绩,求出平均分和总分。

    Console.WriteLine("请输入学生人数:"); int n=int.Parse(Console.ReadLine()); ArrayList arr= new Arr ...

  8. Virtualbox虚拟机安装Ubuntu图文版

    这篇文章给大家介绍一下如何在Windows系统下的Virtual Box虚拟机软件中安装Ubuntu系统. 适用环境:Windows系统作为物理机,在此平台上搭建一个Virtual Box虚拟平台,在 ...

  9. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  10. servlet运行流程

    servlet运行流程  (2013-06-19 19:16:43) 转载▼     首先Servlet被部署到Web容器中,当客户端发送调用这个Servlet的请求到达Web容器时,Web容器会先判 ...