Session的使用(登录例案+其它页面访问)
本程序功能是使用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的使用(登录例案+其它页面访问)的更多相关文章
- session过期返回登录页面跳出frame
session 过期返回登录页面 方法1, HttpSession session = request.getSession(); String LOGIN_ID = (String) session ...
- struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)
需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转 实现: java文件:SessionIterceptor.ja ...
- session过期,登录页面嵌套问题解决
项目主页是框架模式时,如果登录后长时间没有活动(操作),存储在session中的登录信息过期了,这时再去进行操作时,就会出现登录页面嵌套的问题,怎么解决呢? 这里介绍一种方法,只需要加上一段javas ...
- session失效后跳转到登陆页面
一.编写Filter拦截器类 package com.pv.utils; import java.io.IOException; import java.io.PrintWriter; import ...
- 如何实现登录、URL和页面按钮的访问控制?
用户权限管理一般是对用户页面.按钮的访问权限管理.Shiro框架是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理,对于Shiro的介绍这里就不多说.本篇博客主要是了解Shiro的 ...
- 权限管理系统之集成Shiro实现登录、url和页面按钮的访问控制
用户权限管理一般是对用户页面.按钮的访问权限管理.Shiro框架是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理,对于Shiro的介绍这里就不多说.本篇博客主要是了解Shiro的 ...
- .net MVC使用Session验证用户登录(转载)
.net MVC使用Session验证用户登录 用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问 ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- springMVC+request.session实现用户登录和访问权限控制
用springmvc mybatis实现用户登录登出功能,使用session保持登录状态,并实现禁止未登录的用户访问.感谢谷歌资源,在这里做个学习记录加深自己的印象. 原文在我的https://my. ...
随机推荐
- TYVJ1864 守卫者的挑战
P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜 ...
- TCP/IP详解 学习七
静态选路的前提: 1) 网络比较小 2) 网络之间单点连接 3) 网络之间没有多余的路由 动态选路协议,用于路由器之间的通信,有以下几种: 1) ...
- json 数据交换格式与java
http://wiki.mbalib.com/wiki/数据交换 数据交换是指为了满足不同信息系统之间数据资源的共享需要,依据一定的原则,采取相应的技术,实现不同信息系统之间数据资源共享的过程. 数据 ...
- mysql 一个典型的数据库建表建用户过程
cmd 命令不接 ";" mysql 命令后接 ";" 1.以管理员身份登录mysql mysql -u root –p 2.选择mysql数据库 use my ...
- tableView左滑删除功能
实现三个代理方法即可 -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtI ...
- Web Service 元数据注释(JSR 181)
Web Service 元数据注释(JSR 181) @WebService 1.serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service.缺省值 ...
- Linux 磁盘分区
原文地址:http://www.jb51.net/LINUXjishu/57192.html 磁头数(Heads)表示硬盘总共有几个磁头,也就是有几面盘片, 最大为 255 (用 8 个二进制位存储) ...
- AppCompat学习(1)-AppCompatSpinner
andriod中的spinner控件一共有两个,一个是本身的Spinner,一个是android.support.v7.widget.AppCompatSpinner. 两者的区别在于v7内的Spin ...
- 转:Java NIO系列教程(八) DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入.它发送和接收的是数据包. 打开 DatagramChann ...
- Linq实现DataTable的分组统计
DataTable dt = GetTestData(10); //获取10条测试数据 var queryByService = from r in dt.AsEnumerable() group r ...