1

私は学校のためのプロジェクトを作っています。ASP.NetでコーディングされたWebサイトがあり、単純なログインシステムを作成しました。ユーザーが電子メールとパスワードを入力すると、データベースにクエリを実行し、それらが有効であることを確認します。

この時点で、誰がログインしたかを知りたいので、ログインした人を追跡するためのUser.csというクラスがあります。

public class User
{
    static public bool loggedIn = false;
    static public int userType = -1;//1 = Agent, 2 = Buyer/Renter
    static public int id = -1;//the id of the user
}

たとえば、の中User.csには、という変数がありますbool loggedIn。ログインボタンをクリックした後、必要に応じてログイン/サインアップボタンを非表示にできるようtrueに設定しました。Page_Load()私はIISを使用してWebサイトを展開し、コンピューターからログインしてテストしましたが、うまく機能しました。次に、別のコンピューターからログインしましたが、最初のログインから最後のユーザーとしてログインしていました。ログアウトし、Webサイトを開いた他のすべてのコンピューターからもログアウトしました。

結局、適切なログインシステムを作成する方法がわかりません。

4

2 に答える 2

0

さて、あなたが抱えている最初の問題は、ログインしているユーザー情報ですstatic。そのため、アプリケーションのすべてのインスタンスで使用できます。つまり、ログインすると、それがどこでもログインしているユーザーであり、ログアウトすると、どこからでもログアウトされます。

それでは、Userクラスを修正しましょう。

public class User
{
    public bool loggedIn = false;
    public int userType = -1;//1 = Agent, 2 = Buyer/Renter
    public int id = -1;//the id of the user
}

これで、ログインしているユーザーのスパンがインスタンスに固定されます。ただし、まだ完了していません。ポストバックなどで復元できるように、その情報をどこかに保存する必要があります。それを使ってみましょう、彼らはセッションSessionのためにログインしているので、それは理にかなっていますか?したがって、ユーザーを確認するときは、次のことも行います。Page_Load

var usr = new User
{
    loggedIn = true,
    userType = ?,    // pull this value from the database
    id = ?           // pull this value from the database
};
Session["User"] = usr;

そして今、あなたがそのユーザーに到達したいとき、あなたはそれを引き出すことができますSession

var usr = Session["User"] as User;
// if usr is null then there is no logged in user
// otherwise, if it's NOT null there is a logged in user for this session
于 2013-03-20T05:52:40.173 に答える
0

最初の方法:ユーザーがログアウトをクリックした後、UserクラスのloggedIn変数が再びfalseに変更されました。

ただし、正しい方法は、バックエンドデータベースで、ユーザーテーブルに「IsLoggedIn」という新しい列を追加する必要があることです。デフォルト値はfalseとして0であり、ユーザーがログインするとtrueになります。したがって、このために、誰がオンラインであるかどうかを簡単に追跡できます。

于 2013-03-20T05:55:14.087 に答える