Vs2005中有关session及输入url跳过验证的问题.急等!

teacher1998 2006-07-27 12:52:15
我有两问题:
各位,我做了一个验证页面测试,具体思路是在global.asax中用application_start()读取数据库的历史访问记录,同时在此设置在线人数为0;在session_start中此两值均加1,session_end中在线人数
Application["online"]-1;且Applicaion_end中将总访问记录(Applicaion["totle"])写入数据库.
可是为什么我的总访问人数老是不按程序逻辑来增加?我在数据库中设置初始访问量为1000,可是运行后访问量老是自动乘10(比如我运行一次人数应该是1001,可是页面却是10001,这是什么原因?
代码如下:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
System.Data.SqlClient.SqlConnection con = con_Count.creatCon();
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("select * from countPeople", con) ;//数据库中取总访问量
int count=Convert.ToInt32(cmd.ExecuteScalar());
Application["totle"] = count;//总的访问人数->从数据库中取出
Application["online"] = 0;//在线人数
con.Close();
}

void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown

System.Data.SqlClient.SqlConnection con = con_Count.creatCon();
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("update countPeople set num=" + Convert.ToInt32(Application["totle"])+ 1, con);
cmd.ExecuteNonQuery();
con.Close();


}


void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Session.Timeout = 1;//为了效果明显我设置为1分钟有效
Application.Lock();
Application["totle"] = (int)Application["totle"] + 1;
Application["online"] = (int)Application["online"] + 1;
Application.UnLock();

}

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.
Application.Lock();
Application["online"] = (int)Application["online"] - 1;
Application.UnLock();

}
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
问题2:
另外,我还做了一登录页面,相关代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = con_Count.creatCon();

string constr = "select count(*) from userTable where userName ='" +this.userName.Text+ "'and userPwd='" +this.userPwd.Text+"'";
SqlCommand cmd = new SqlCommand(constr, con);
int flag=(int)cmd.ExecuteScalar();
con.Close();
if (flag > 0)
{
Session["flag"]=true;//这是为了防止直接在地址栏中输入url的
Response.Redirect("main.aspx");
}
else
{
Session["flag"]=false;
this.lblError.Visible = true;

}

其中main.aspx的page_load事件代码如下,
protected void Page_Load(object sender, EventArgs e)
{
if (Session["flag"] == null || Session["flag"].ToString() == "flase")
{
Response.Redirect("Default.aspx");
}


}

}

在我没有点击"登录"按钮时而在地址栏中输入url时,可以很好的阻止,但是当有有点击"登录"按钮时(此时我没有输入任何的用户信息),再在地址栏输入url时,却不可以被阻止,这是为什么?有什么好的方案可以阻止url输入绕过?
...全文
229 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
teacher1998 2006-08-03
  • 打赏
  • 举报
回复
楼上意思?
powerzy 2006-08-02
  • 打赏
  • 举报
回复
你跟踪一下flag的值
感觉怎么都会大于0
clonemsdn 2006-08-02
  • 打赏
  • 举报
回复
第一次来,我学习.
teacher1998 2006-07-29
  • 打赏
  • 举报
回复
who help me?
please!
kingtoo1 2006-07-29
  • 打赏
  • 举报
回复
学习
------------------------

100M asp.net 空间只要50元(www.kingtoo.com)
支持ASP.NET1.1, 2.0
boby168 2006-07-29
  • 打赏
  • 举报
回复
Session.Timeout = 1; 没起效果???

用Session.Abandon,强制其超时试试。
teacher1998 2006-07-28
  • 打赏
  • 举报
回复
Session.Timeout = 1;//为了效果明显我设置为1分钟有效
我的session.timeout是1分钟啊,

num是int型数据,用来记录历史访问人数
gu5 2006-07-28
  • 打赏
  • 举报
回复
问题1是你更新有问题
不知道你num是什么类型,
我按字符型写的代码你试试:
SqlCommand cmd = new SqlCommand("update countPeople set num=" + Application["totle"].ToString(), con);

PS:System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("update countPeople set num=" + Convert.ToInt32(Application["totle"])+ 1, con);
不知道你为什么还要加1
gu5 2006-07-28
  • 打赏
  • 举报
回复
问题2是因为Session的缘故,因为你登录过后已经记录下Session了,而Session默认失效是20分钟,所以要20分钟后你去试才能知道结果

如果想改变Session的时间,那就设置一下timeout吧
teacher1998 2006-07-28
  • 打赏
  • 举报
回复
怎么一直没人帮忙啊,哪位好心啊
teacher1998 2006-07-27
  • 打赏
  • 举报
回复
不知大家有没明白我的问题?诚恳请求指教.
teacher1998 2006-07-27
  • 打赏
  • 举报
回复
不会吧?怎么会是session过期了?
newmanxiaoqi 2006-07-27
  • 打赏
  • 举报
回复
Session过期了
teacher1998 2006-07-27
  • 打赏
  • 举报
回复
为什么没人来看看啊
teacher1998 2006-07-27
  • 打赏
  • 举报
回复
sos
teacher1998 2006-07-27
  • 打赏
  • 举报
回复
我编绎是可以通过的.

对于:
一般在程序中不倾向于用Sesssion_End等这种事件,一般不靠谱也不好调试

真的是这样的吗?我第一次听说,我想在线人数一般应放在session_end中去吧?否则话哪较好一点?

多谢
teacher1998 2006-07-27
  • 打赏
  • 举报
回复
sos
ke888l3 2006-07-27
  • 打赏
  • 举报
回复
不太明白你的代码为什么会这么写
我的建议:
对于第一个问题 一般在程序中不倾向于用Sesssion_End等这种事件,一般不靠谱也不好调试
对于第二个问题 我是这么想的。你不点登录的时候Session["flag"]应该是个null,其实我怀疑这时候 Session["flag"]是没有的,你这样程序没抛出异常?另外,对于Session["flag"].ToString() 好像也编译不过吧,我以前都是用(string)Session["flag"]的。
teacher1998 2006-07-27
  • 打赏
  • 举报
回复
help me

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧