Sessiyada sessiya o'tkazish mumkinmi?

Mening dasturim uchun 3 foydalanuvchi turi bor. Xodimlar, Xodimlar va Sotuvchi. Xodimga kirgan har bir xodim faqatgina xodimga mavjud bo'lgan sahifalarga kira oladi.

 if( $usr->userLogin() ) {

    echo "Welcome";
     if($usr->user_type == "Vendor") {
       $_SESSION['vend']='set';
      header("Location:Vendor/vendorHome.php");
    }
    else if($usr->user_type == "HR"){
      $_SESSION['hr']='set';
    header("Location:HR/hrHome.php");
}
  else {
    $_SESSION['emp']='set';
    header("Location:Employee/home.php");
  }
}
else {
    echo "Incorrect Username, Password, or User Type. Please Try Again";

Har bir sahifaning yuqori qismida ushbu kod 3 turdagi biri bo`yicha turli xil bo`lgan.

?php
session_start();
if(!isset($_SESSION['vend'])) #If session is not set, user isn't logged in.
                             #Redirect to Login Page
       {
           header("Location:../index.php");
       }
?>

Ushbu dasturni yozganda, bu men uchun har qanday turdagi boshqa foydalanuvchini qo'shsam, ikkinchi foydalanuvchi birinchi foydalanuvchilar sahifalariga, ma'lumotlarga va ma'lumotlar bazasidan hamma narsani olishiga ishonchim komil. Foydalanuvchi asosida ikkinchi sessiya identifikatorini e'lon qilishning biron bir usuli mavjudmi? Foydalanuvchilarning turi va shaxsiy foydalanuvchisining o'zi asosida har bir foydalanuvchi uchun qanday ma'lumot mavjudligini cheklashim kerak? Bu hatto mumkinmi? Har bir turi uchun qancha foydalanuvchi borligini bilmayman, lekin 5 dan ortiq bo'lganida bir nechta bo'ladi.

** EDIT: ** Sizning takliflaringiz uchun tashakkur. Men ular bilan kodni takomillashtiraman. Men o'z muammomni to'g'ri tushuntirdim, deb o'ylamayman.

Xodimning "Jek" va "Jill" 2 nafar foydalanuvchilariga ega ekanligimni bildiraman. "Jek" dasturdan o'tib, faqatgina ko'rish yoki tahrir qilish va tizimga kirishni rejalashtiradigan ayrim shakllarni qo'shdi. Jill kirganida u hech narsani ko'rmasligi kerak edi. Bunday emas. "Jill" kirishga kirishdi va "Jek" ning hamma narsani ko'rish va tahrir qilish imkoniga ega bo'ldi. "Jek" yoki "Jill" HR yoki sotuvchi bilan bog'liq hech qanday narsaga erisha olmaydi. Sessiyaning o'zgaruvchilari bu qismi ishlagan.

0
Ehtimol, ma'lumotlar bazasi tizimini qayta ko'rib chiqishingiz kerak, sizning holatingizda foydalanuvchi turi bir qator deb hisoblanishi mumkin va foydalanuvchilar bir necha qatorga ega bo'lishi mumkin. Jadvalga bir oz bayroq qiymatidan iborat yangi ustunni kiritishingiz mumkin. Keyin $ usr-> rank & RANK_VENDOR va hokazo kabi narsalarni qilishingiz mumkin.
qo'shib qo'ydi muallif Xorifelse, manba
Bunga nima deysiz: Agar istalgan turdagi boshqa foydalanuvchini qo'shsam, ikkinchi foydalanuvchi birinchi foydalanuvchilar sahifalariga kira oladi
qo'shib qo'ydi muallif AbraCadaver, manba
Bunga nima deysiz: Agar istalgan turdagi boshqa foydalanuvchini qo'shsam, ikkinchi foydalanuvchi birinchi foydalanuvchilar sahifalariga kira oladi
qo'shib qo'ydi muallif AbraCadaver, manba
Ma'lumotlar bazasi ma'lumotni foydalanuvchi identifikatorlari bilan bog'lamaydimi? Siz hatto foydalanuvchi identifikatorlarini saqlaysizmi? Bu sizning ilovangizdagi dizayn xatosi kabi ko'rinadi.
qo'shib qo'ydi muallif Bytewave, manba
Ma'lumotlar bazasi ma'lumotni foydalanuvchi identifikatorlari bilan bog'lamaydimi? Siz hatto foydalanuvchi identifikatorlarini saqlaysizmi? Bu sizning ilovangizdagi dizayn xatosi kabi ko'rinadi.
qo'shib qo'ydi muallif Bytewave, manba
Qanday qilib siz biron-bir ma'lumotni saqlaysiz? Ma'lumotlar bazasidan seansdagi shaxsiy qiymatdan (id kabi) tortib yuborsangiz, muammo ko'rmayapman. Yo'nalishni boshlashdan avval biror narsani bosmadan chop etishingiz mumkin.
qo'shib qo'ydi muallif Dmitry Ponkin, manba
Faqat bir kuzatish: Header JoyXarajdan keyin skriptni (chiqish) yakunlashni unutmang.
qo'shib qo'ydi muallif rogeriolino, manba
Faqat bir kuzatish: Header JoyXarajdan keyin skriptni (chiqish) yakunlashni unutmang.
qo'shib qo'ydi muallif rogeriolino, manba
Fikrlar uchun rahmat. DmitryPonkin, yo'naltirishlar ishlaydi. rogeriolino, men buni qilishim kerakligini bilmasdim. Menga xabar berganingiz uchun tashakkur. Bytewave, User_ID - imzolangan avtomatik hisoblash raqamidir. Xorifelse Nima so'rayotganingizni tushunmayapman.
qo'shib qo'ydi muallif jbfig, manba
Fikrlar uchun rahmat. DmitryPonkin, yo'naltirishlar ishlaydi. rogeriolino, men buni qilishim kerakligini bilmasdim. Menga xabar berganingiz uchun tashakkur. Bytewave, User_ID - imzolangan avtomatik hisoblash raqamidir. Xorifelse Nima so'rayotganingizni tushunmayapman.
qo'shib qo'ydi muallif jbfig, manba

10 javoblar

Sessiyaning o'zgaruvchan qiymatlari allaqachon foydalanuvchi dono. Shunday qilib, bir foydalanuvchi uchun bir tizimga o'zgaruvchisini o'rnatgan bo'lsangiz, ular faqat o'sha foydalanuvchi uchun o'rnatiladi. Saytdan foydalanadigan har qanday boshqa foydalanuvchi boshqa foydalanuvchilarning qiymatiga ega bo'lmaydi.

Ehtimol, kerakli foydalanuvchi identifikatorini suhbatda saqlagan foydalanuvchi turi bilan birgalikda saqlash kerak. Men ham bitta bir tizimga o'zgaruvchini yozishni taklif qilaman.

$_SESSION['user'] =//user's id from your db
$_SESSION['usertype'] = $usr->user_type;

So'ng oddiygina sahifaning yuqorisida xuddi shunday vazifani quyidagicha o'z ichiga oladi

function validateUser($type) {
    if(empty($_SESSION['usertype']) || $_SESSION['usertype'] != $type)
       header("Location:../index.php");
}

Va shuningdek, har bir sahifaning yuqori qismida vazifani chaqir

validateUser('vendor');//and others for each page

Bundan tashqari, har bir sahifaning yuqori qismida validateUser funktsiyasiga ega bo'lgan faylni kiritishni unutmang. Ehtimol, bunday narsa.

include('header.php');

Turli foydalanuvchilarga turli xil ma'lumotlarni ko'rsatish uchun esa yuqorida qayd etilgan sessiyadagi foydalanuvchi identifikatoridan foydalanasiz va foydalanuvchini faqat o'z ma'lumotlarini ko'rsatish uchun so'rovga qo'shasiz (Xavfsiz).

makeDbQuery('SELECT * FROM foo WHERE user_id = ?', [$_SESSION['user']])

Yuqoridagi so'rovlar mexanizmini tasavvur qildim, uni o'zingiz bilan almashtirishingiz kerak.

0
qo'shib qo'ydi

Sessiyaning o'zgaruvchan qiymatlari allaqachon foydalanuvchi dono. Shunday qilib, bir foydalanuvchi uchun bir tizimga o'zgaruvchisini o'rnatgan bo'lsangiz, ular faqat o'sha foydalanuvchi uchun o'rnatiladi. Saytdan foydalanadigan har qanday boshqa foydalanuvchi boshqa foydalanuvchilarning qiymatiga ega bo'lmaydi.

Ehtimol, kerakli foydalanuvchi identifikatorini suhbatda saqlagan foydalanuvchi turi bilan birgalikda saqlash kerak. Men ham bitta bir tizimga o'zgaruvchini yozishni taklif qilaman.

$_SESSION['user'] =//user's id from your db
$_SESSION['usertype'] = $usr->user_type;

So'ng oddiygina sahifaning yuqorisida xuddi shunday vazifani quyidagicha o'z ichiga oladi

function validateUser($type) {
    if(empty($_SESSION['usertype']) || $_SESSION['usertype'] != $type)
       header("Location:../index.php");
}

Va shuningdek, har bir sahifaning yuqori qismida vazifani chaqir

validateUser('vendor');//and others for each page

Bundan tashqari, har bir sahifaning yuqori qismida validateUser funktsiyasiga ega bo'lgan faylni kiritishni unutmang. Ehtimol, bunday narsa.

include('header.php');

Turli foydalanuvchilarga turli xil ma'lumotlarni ko'rsatish uchun esa yuqorida qayd etilgan sessiyadagi foydalanuvchi identifikatoridan foydalanasiz va foydalanuvchini faqat o'z ma'lumotlarini ko'rsatish uchun so'rovga qo'shasiz (Xavfsiz).

makeDbQuery('SELECT * FROM foo WHERE user_id = ?', [$_SESSION['user']])

Yuqoridagi so'rovlar mexanizmini tasavvur qildim, uni o'zingiz bilan almashtirishingiz kerak.

0
qo'shib qo'ydi

Sizning mantiqiy tuzilmangiz o'zgaruvchilar nomlarini qiymatlari sifatida ishlatadi, shuning uchun siz ikkita narsani qilishingiz mumkin:

  • Ushbu qiymatlarni saqlash uchun bitta o'zgaruvchini o'rnating.

  • Ushbu qiymatni bir qatorga joylashtiring.

Birinchi misol:

Sozlash:

$_SESSION['usertype'] = "emp"; 
                      = "hr"; 
                      = "vend";

Tekshiruv:

if($_SESSION['usertype'] !== "vend"){
                                    ...

Ikkinchi misol:

Sozlash:

 $_SESSION['usertype']['emp'] = true/false; 
 $_SESSION['usertype']['hr'] = true/false; 
 $_SESSION['usertype']['vend'] = true/false;

Tekshiruv:

if(!$_SESSION['usertype']['vend']){
                                   ...

Bundan tashqari, bir vaqtning o'zida bir nechta turkumda bo'lish uchun a'zoni osongina o'rnatishingiz mumkin.


  • After your header redirectons you should always stop the script execution with die or exit
  • It is logically easier and more constructive to set values as boolean (see second example) rather than a manual string flag of "set" which needs to be manually checked each time.
0
qo'shib qo'ydi

Sizning mantiqiy tuzilmangiz o'zgaruvchilar nomlarini qiymatlari sifatida ishlatadi, shuning uchun siz ikkita narsani qilishingiz mumkin:

  • Ushbu qiymatlarni saqlash uchun bitta o'zgaruvchini o'rnating.

  • Ushbu qiymatni bir qatorga joylashtiring.

Birinchi misol:

Sozlash:

$_SESSION['usertype'] = "emp"; 
                      = "hr"; 
                      = "vend";

Tekshiruv:

if($_SESSION['usertype'] !== "vend"){
                                    ...

Ikkinchi misol:

Sozlash:

 $_SESSION['usertype']['emp'] = true/false; 
 $_SESSION['usertype']['hr'] = true/false; 
 $_SESSION['usertype']['vend'] = true/false;

Tekshiruv:

if(!$_SESSION['usertype']['vend']){
                                   ...

Bundan tashqari, bir vaqtning o'zida bir nechta turkumda bo'lish uchun a'zoni osongina o'rnatishingiz mumkin.


  • After your header redirectons you should always stop the script execution with die or exit
  • It is logically easier and more constructive to set values as boolean (see second example) rather than a manual string flag of "set" which needs to be manually checked each time.
0
qo'shib qo'ydi

Bir seans o'zgaruvchisini ishlatib, uning qiymatini foydalanuvchining profiliga qo'yaman:

if( $usr->userLogin() ) {

    echo "Welcome";
     if($usr->user_type == "Vendor") {
       $_SESSION['user_type']='vendor';
      header("Location:Vendor/vendorHome.php");
    }
    else if($usr->user_type == "HR"){
      $_SESSION['user_type']='hr';
    header("Location:HR/hrHome.php");
}
  else {
    $_SESSION['user_type']='emp';
    header("Location:Employee/home.php");
  }
}

So'ngra har bir sahifada foydalanuvchining foydalanuvchi turi/roli qayd etilganligini tekshiring:

session_start();
if(!isset($_SESSION['user_type']) or $_SESSION['user_type'] !== 'vendor')//vendor, or hr ... 
       {
           header("Location:../index.php");
       }
0
qo'shib qo'ydi
Men buni birinchi marotaba qilganman, shuning uchun men shu yo'l bilan o'tishga harakat qildim.
qo'shib qo'ydi muallif jbfig, manba

Bir seans o'zgaruvchisini ishlatib, uning qiymatini foydalanuvchining profiliga qo'yaman:

if( $usr->userLogin() ) {

    echo "Welcome";
     if($usr->user_type == "Vendor") {
       $_SESSION['user_type']='vendor';
      header("Location:Vendor/vendorHome.php");
    }
    else if($usr->user_type == "HR"){
      $_SESSION['user_type']='hr';
    header("Location:HR/hrHome.php");
}
  else {
    $_SESSION['user_type']='emp';
    header("Location:Employee/home.php");
  }
}

So'ngra har bir sahifada foydalanuvchining foydalanuvchi turi/roli qayd etilganligini tekshiring:

session_start();
if(!isset($_SESSION['user_type']) or $_SESSION['user_type'] !== 'vendor')//vendor, or hr ... 
       {
           header("Location:../index.php");
       }
0
qo'shib qo'ydi
Men buni birinchi marotaba qilganman, shuning uchun men shu yo'l bilan o'tishga harakat qildim.
qo'shib qo'ydi muallif jbfig, manba

Barcha foydalanuvchilar uchun bir xil SESSION o'zgaruvchilardan foydalanish haqida nima deyish mumkin? $ _ SESSION ["user_type"] = X; kabi. Keyin bu o'zgaruvchini tekshirib ko'rishingiz mumkin.

0
qo'shib qo'ydi

Barcha foydalanuvchilar uchun bir xil SESSION o'zgaruvchilardan foydalanish haqida nima deyish mumkin? $ _ SESSION ["user_type"] = X; kabi. Keyin bu o'zgaruvchini tekshirib ko'rishingiz mumkin.

0
qo'shib qo'ydi

Men bir nechta sessiyalarni amalga oshirish mumkinligini bilmayman, lekin har bir veb-sahifaning birinchi qismida user_type maydonini o'qib chiqsangiz va to'g'ri foydalanuvchi bo'lsa, u boshqa turdagi bo'lishi mumkin, men to'g'ri Bosh sahifaga qayta yo'naltirilishi kerak. Shu tarzda, agar foydalanuvchi HR tiplari 'Vendor/vendorHome.php' tizimida sizda mavjud bo'lgan bir xil xatti-harakat foydalanuvchini qayta yo'naltirishi va sotuvchi Home.php-ni boshqa foydalanuvchilar tomonidan o'qiy olishi mumkin bo'lsa.

Foydalanuvchilarning sessiyadagi o'rniga filtrlash uchun har doim BD-ga foydalanuvchi parametrini kiriting.

0
qo'shib qo'ydi

Men bir nechta sessiyalarni amalga oshirish mumkinligini bilmayman, lekin har bir veb-sahifaning birinchi qismida user_type maydonini o'qib chiqsangiz va to'g'ri foydalanuvchi bo'lsa, u boshqa turdagi bo'lishi mumkin, men to'g'ri Bosh sahifaga qayta yo'naltirilishi kerak. Shu tarzda, agar foydalanuvchi HR tiplari 'Vendor/vendorHome.php' tizimida sizda mavjud bo'lgan bir xil xatti-harakat foydalanuvchini qayta yo'naltirishi va sotuvchi Home.php-ni boshqa foydalanuvchilar tomonidan o'qiy olishi mumkin bo'lsa.

Foydalanuvchilarning sessiyadagi o'rniga filtrlash uchun har doim BD-ga foydalanuvchi parametrini kiriting.

0
qo'shib qo'ydi
PhP |BotsUz
PhP |BotsUz
93 ishtirokchilar

Phpni o'rganishni Hohlasangiz https://t.me/joinchat/AAAAAE-KRc5dd5tPMmGmWA A'zo bo'lin