项目快完成了,发现一个大BUG!

mahongxi 2004-12-31 02:43:34
以前没考虑这个问题
在一个类 Env 中有一个
static int userid;
记录当前登录的用户编号.发现如果有其它用户连上来后,原来的连接的用户标识也跟着变了.我怀疑是共同用了这一个数据成员.

各位是如何解决这种问题的?
...全文
463 39 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
mahongxi 2005-01-04
  • 打赏
  • 举报
回复
谢谢大家,特别是goody9807() ( 两星(中级)) 问题解决了,我就是想知道这个
HttpContext.Current.Session 的东东.

我只需在 Env.cs 中把原来的 static 改为对实例的调用, 再实现一个
sessionid -- Env 对象的 map ,就能通过 env.SessionIDLocator -- 一个
指向 web 中某 cs 的方法(HttpContext.Current.Session) 的代理对象.
取得 env 对象.

那我其它地方的代码只需要把 env. --> evn.currentEvn. 就行了.
mahongxi 2004-12-31
  • 打赏
  • 举报
回复
需要不存验证权限 _> 需要不断验证权限.
mahongxi 2004-12-31
  • 打赏
  • 举报
回复
to zhanqiangz(闲云野鹤) :
是地.因为操作中需要不存验证权限.
mahongxi 2004-12-31
  • 打赏
  • 举报
回复
哪位仁兄有空,帮帮兄弟:
msn
enjoylinux#hotmail.com
# -> @
mahongxi 2004-12-31
  • 打赏
  • 举报
回复
2个不用的session调用classlibrary 中的一个方法,在这个方法中没有办法找到

调用者身份(或是不用的 thread id)?
Overriding 2004-12-31
  • 打赏
  • 举报
回复
你想在用户的整个操作过程中要保持其状态,要能够识别他的身份吗?
asp600 2004-12-31
  • 打赏
  • 举报
回复
ClassLibrary1
中调用Session不是一个好方法
goody9807 2004-12-31
  • 打赏
  • 举报
回复
HttpContext.Current.Session["userid"]
写在ClassLibrary1
中就不用每个页面都写了
mahongxi 2004-12-31
  • 打赏
  • 举报
回复
如果不用 static 是可以,服务器存储所有登录用户标识,我可以用一个
hash表,把 连接标识(对于web是 sessionid ) 和 登录环境(包括userid)记录进
去.但有什么办法在所有想到用 "登录环境"的地方不需要显示指定 连接标识?
我觉得asp.net 应做到让开发者不用考虑这个问题.
Overriding 2004-12-31
  • 打赏
  • 举报
回复
你的那个类中的变量不是static会怎么样,实例化一个类,如果类的生命周期没有结束,它的那些共有成员应该是可以访问的啊!
mahongxi 2004-12-31
  • 打赏
  • 举报
回复
实际上项目是这样的.
表示层 web winform mobile
-------------------------------
逻辑层1 ClassLibrary1
-------------------------------
逻辑层2 ClassLibrary2
--------------------------------
数据库

在罗辑层1的实现 ClassLibrary1 中有一个类叫 Env 存储一些 登录用户信息
我希望在代码中任何地方调用Env.CurUser 得到的都是调用发出者的用户标识

如果在调用 Env时还要传一个参数类似 sessionID 等标识,太烦了.
xueqs 2004-12-31
  • 打赏
  • 举报
回复
static的问题
HttpContext.Current.Session["userid"]
常修溢 2004-12-31
  • 打赏
  • 举报
回复
关注.学习
Overriding 2004-12-31
  • 打赏
  • 举报
回复

HttpContext.Current.Session()?
mahongxi 2004-12-31
  • 打赏
  • 举报
回复
在一个 ClassLibrary 中有一个方法,如果在这个方法取取得调用这个方法的
session(或进程吧) 标识?
pxk 2004-12-31
  • 打赏
  • 举报
回复
static只能声明一个的。
Overriding 2004-12-31
  • 打赏
  • 举报
回复
楼主可以说具体一点,你的那个userid是用来标志用户身份的,在进程的整个生命周期都存在吗?
iuhxq 2004-12-31
  • 打赏
  • 举报
回复
偶也觉得楼主不应该问这个问题


偶是下面这么处理的,偶还想改成static的呢

using System;

namespace guestbook
{
/// <summary>
/// admin 的摘要说明。
/// </summary>
public class admin:System.Web.UI.Page
{
public admin()
{
//
// TODO: 在此处添加构造函数逻辑
//
if ( Session["username"] != null && Session["username"].ToString() != "" )
{
_username = Session["username"].ToString();
}
}

/// <summary>
/// 登陆标志
/// </summary>
private string _username;

public string username
{
get
{
return _username;
}
set
{

}
}

public bool Login(string strUsername, string strPassword)
{
if (strUsername == "admin" && strPassword == "admin" )
{
_username = strUsername;
Session["username"] = strUsername;
return true;
}
return false;
}

public bool IsLogin()
{
if ( Session["username"] != null && Session["username"].ToString() != "" )
{
return true;
}
else
{
return false;
}
}

public void Logout()
{
Session["username"] = null;
}
}
}
mahongxi 2004-12-31
  • 打赏
  • 举报
回复
staitc 概念我了解.
我本以为微软会把不同的session 用不同的环境隔开.

mahongxi 2004-12-31
  • 打赏
  • 举报
回复
关键是我的userid 是保存在 另外一个工程(dll) 中的,有什么办法在
dll 中取得当前session 标识呢?
加载更多回复(19)

62,244

社区成员

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

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

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

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