Jump to content

Сессия пользователя


artem_niko

Recommended Posts

Добрый день!
Я бы хотел, чтобы мне пояснили на счет сессии пользователя при подключении.
Дело в том, что у меня в проекте идет авторизация через пароль на форме UniLoginForm, на которой также выполняется подключение к серверу базы данных Firebird (используя логин и пароль, которые созданы для пользователя на сервере).
Там же, в этой форме у меня пароль, только что авторизовавшегося пользователя, заносится в переменную типа PWideChar, т.к. пароль нужен потом для дальнейшей работы пользователя при работе с процедурами через DLL. Но, в какой-то момент у меня проходит ошибка, суть которой, согласно отладчику, заключается в том, что "неправильный логин или пароль". 
В связи с этим у меня вопросы:
1. Правильно ли я понял, что MainModule для каждого сеанса является уникальным для подключившегося пользователя?
2. Где мне расположить переменную, хранящую в себе пароль, чтобы он был доступен только тому пользователю, который авторизовался и только что подключился? Чтобы другие, кто авторизуется, они работали со своим паролем.
 

Link to comment
Share on other sites

8 hours ago, Sherzod said:

Добрый день.

Пожалуйста, укажите какую версию и издание UniGUI используете? 

 uniGUI Complete Trial Edition 1.90.0.1500 (uniGUI Equinox) 

Читал, что надо делать авторизацию вроде бы через LoginForm, как в одной из демок, чтобы правильно проходила авторизация.

Это так?

 

Link to comment
Share on other sites

36 minutes ago, Sherzod said:

Да я читал про это. Я задал конкретный вопрос: правильно ли я понял, исходя из ссылок выше, что чтобы мне решить мою проблему с сессиями, то надо использовать авторизацию как в демке про LoginForm?

Link to comment
Share on other sites

12 hours ago, Артем said:

1. Правильно ли я понял, что MainModule для каждого сеанса является уникальным для подключившегося пользователя?

Да

 

12 hours ago, Артем said:

2. Где мне расположить переменную, хранящую в себе пароль, чтобы он был доступен только тому пользователю, который авторизовался и только что подключился? Чтобы другие, кто авторизуется, они работали со своим паролем.

Вы можете использовать MainModule...

 

12 hours ago, Артем said:

Но, в какой-то момент у меня проходит ошибка, суть которой, согласно отладчику, заключается в том, что "неправильный логин или пароль". 

Вы не даете подробную информацию, и мне не понятно где проблема

Но, для авторизации Вам лучше использовать UniLoginForm

Link to comment
Share on other sites

On 6/9/2019 at 12:51 AM, Sherzod said:

Да

 

Вы можете использовать MainModule...

 

Вы не даете подробную информацию, и мне не понятно где проблема

Но, для авторизации Вам лучше использовать UniLoginForm

Так я и использую MainModule, потому что взял демку UniLoginForm Coockies и переделал на ее основе авторизацию для проекта.

Я оставил, как было в демке, переменные с логином и паролем в MainModule:

type
  TUniMainModule = class(TUniGUIMainModule)
    FDConnection: TFDConnection;
    FDPhysFBDriverLink: TFDPhysFBDriverLink;
    FDTransaction: TFDTransaction;
    FDStoredProc1: TFDStoredProc;
    procedure UniGUIMainModuleBeforeLogin(Sender: TObject; var Handled: Boolean);
    procedure UniGUIMainModuleCreate(Sender: TObject);
  private
  public
    {Глобальные переменные для каждого пользователя после авторизации в рамках
     текущего сеанса}
    LoggedUser,LoggedPassword: WideString;
  end;

В событии MainForm.UniFormShow я, для примера, взял и поместил на форму UniLabel, чтобы видеть, что при авторизации через разные браузеры у меня действительно отличаются логин и пароль для разных пользователей. И это работает.

Теперь же мне надо передавать через FDStoredProc, в качестве значения, некий параметр InParam типа WideString. Процедура отрабатывает, но!

Независимо от того, под каким пользователем я авторизовался у меня одинаковый результаты процедуры, а такого не должно быть, т.к. в первом случае у меня этот самый параметр InParam (под первым пользователем) отсутствует, соответственно, для первого пользователя FDStoredProc не должен возвращать для него данные, если передается пустой параметр InParam . А для второго пользователя должен вернуться набор данных, т.к. для него передается непустой параметр InParam .

Исходя из этого я делаю предположение, что эта самая переменная InParam , которая объявлена у меня так:

type
  TUniMainModule = class(TUniGUIMainModule)
    FDConnection: TFDConnection;
    FDPhysFBDriverLink: TFDPhysFBDriverLink;
    FDTransaction: TFDTransaction;
    FDStoredProc1: TFDStoredProc;
    procedure UniGUIMainModuleBeforeLogin(Sender: TObject; var Handled: Boolean);
    procedure UniGUIMainModuleCreate(Sender: TObject);
  private
  public
    {Глобальные переменные для каждого пользователя после авторизации в рамках
     текущего сеанса}
    LoggedUser,LoggedPassword: WideString;
    ResultCheck: PChar;
  end;

function UniMainModule: TUniMainModule;

var
  InParam: WideString;

implementation
....

то она на уровне сервера сохраняет свое значение. Такого быть не должно. 

Может быть я неправильно разместил и объявил эту переменную? Если да, то куда ее нужно положить, чтобы она, ее значение, было доступно только авторизовавшемуся пользователю, для которого создается свой экземпляр MainModule.

Также, вопрос в том, в каком месте расположить код подключения к базе данных? 
В переменные LoggedUser и LoggedPassword соответствующие данные передаются в событии кнопки, которая располагается на UniLoginForm, т.е. сначала: код подключения к базе данных с полученными LoggedUser и LoggedPassword, а потом уже ModalResult:=mrOK формы UniLoginForm. Но, правильно так делать?

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...