Я пытаюсь использовать Python и PHP одновременно, что по большей части работает, НО вход в систему, потому что для большей части моего PHP требуется сеанс
`
if (!isset($_SESSION['session_id'])) {
header("Location: http://localhost:5000/"); // Redirect to login page if not logged in
exit();
}`
чтобы проверить, кто вошел в систему, и отобразить соответствующую страницу в зависимости от типа пользователя, сеанс Python
`from flask import Flask, render_template, request, redirect, session, flash
from app import app
from db import mysql
import pymysql
import bcrypt
import uuid
app.secret_key = 'your_secret_key'
def get_db_connection():
return mysql.connect()
@app.route('/')
def index():
return render_template('login.html')
@app.route('/login', methods=['POST'])
def login():
email = request.form['email']
password = request.form['password']
user_type = request.form['user_type']
connection = get_db_connection()
try:
with connection.cursor(pymysql.cursors.DictCursor) as cursor:
sql = """
SELECT u.*, ut.user_type_name
FROM tbl_users u
JOIN tbl_user_types ut ON u.user_type_id = ut.user_type_id
WHERE u.Email = %s AND ut.user_type_name = %s
"""
cursor.execute(sql, (email, user_type))
user = cursor.fetchone()
if user and bcrypt.checkpw(password.encode('utf-8'), user['Password'].encode('utf-8')): # Verify hashed password
session['UserID'] = user['UserID']
session['UserType'] = user['user_type_name']
session['FirstName'] = user['FirstName']
session['Email'] = user['Email']
session_id = str(uuid.uuid4())
session['session_id'] = session_id
# Store session in the database
insert_session_sql = """
INSERT INTO tbl_sessions (session_id, UserID, UserType, FirstName, Email) VALUES (%s, %s, %s, %s, %s)
"""
cursor.execute(insert_session_sql, (session_id, user['UserID'], user['user_type_name'], user['FirstName'], user['Email']))
connection.commit()
if user['user_type_name'] == 'admin':
return redirect('/admin/home')
else:
return redirect('/user/home')
else:
flash('Invalid email or password')
return redirect('/')
finally:
connection.close()
@app.route('/admin/home')
def admin_home():
if 'session_id' in session:
return render_template('admin_home.html') # Ensure you have an admin_home.html template
else:
return redirect('/')
@app.route('/user/home')
def user_home():
if 'session_id' in session:
return render_template('user_home.html') # Ensure you have a user_home.html template
else:
return redirect('/')
@app.route('/logout')
def logout():
if 'session_id' in session:
session_id = session['session_id']
connection = get_db_connection()
try:
with connection.cursor() as cursor:
delete_session_sql = "DELETE FROM tbl_sessions WHERE session_id = %s"
cursor.execute(delete_session_sql, (session_id,))
connection.commit()
finally:
connection.close()
session.clear()
return redirect('/')
@app.route('/submit-user', methods=['POST'])
def submit_user():
"""
Add a new user to the database.
"""
if request.method == 'POST':
# Get form data
first_name = request.form.get('FirstName')
last_name = request.form.get('LastName')
middle_name = request.form.get('MiddleName')
age = request.form.get('Age')
contact_number = request.form.get('ContactNumber')
address = request.form.get('Address')
email = request.form.get('Email')
password = request.form.get('Password')
user_type_id = request.form.get('user_type_id')
if not all([first_name, last_name, email, password, user_type_id]):
flash("Please fill in all required fields.", "danger")
return redirect('/')
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
connection = get_db_connection()
try:
with connection.cursor() as cursor:
query = """
INSERT INTO tbl_users (FirstName, LastName, MiddleName, Age, ContactNumber, Address, Email, Password, user_type_id)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
cursor.execute(query, (
first_name, last_name, middle_name, age, contact_number, address, email, hashed_password, user_type_id
))
connection.commit()
flash("User successfully added!", "success")
return redirect('/read-all-users-html')
except Exception as e:
flash("An error occurred while adding the user. Please try again.", "danger")
print(f"User creation error: {e}")
finally:
connection.close()
if __name__ == "__main__":
app.run(debug=True)
`
по какой-то причине не переводится на php, из-за чего, когда вы правильно входите в систему и переходите, например, на домашнюю страницу администратора, он просто перенаправляется обратно на вход в систему. Может ли кто-нибудь порекомендовать мне какое-нибудь решение этой проблемы?
Я проделал некоторые работы, например, сохранил сеанс в базе данных.
```TABLE tbl_sessions (
session_id varchar(255) NOT NULL,
UserID int(11) NOT NULL,
UserType varchar(50) NOT NULL,
FirstName varchar(50) NOT NULL,
Email varchar(100) NOT NULL,
created_at метка времени NOT NULL DEFAULT current_timestamp(),
ПЕРВИЧНЫЙ КЛЮЧ (session_id),
KEY UserID (UserID),
CONSTRAINT tbl_sessions_ibfk_1 ВНЕШНИЙ КЛЮЧ (UserID) ССЫЛКИ на tbl_users (UserID) ПРИ УДАЛЕНИИ КАСКАДА
and the session is gonna be fetched to the php page but idk it still wont work.
Подробнее здесь: https://stackoverflow.com/questions/793 ... sion-logic
Проблемы со входом из-за логики сеанса ⇐ Python
Программы на Python
1736233114
Anonymous
Я пытаюсь использовать Python и PHP одновременно, что по большей части работает, НО вход в систему, потому что для большей части моего PHP требуется сеанс
`
if (!isset($_SESSION['session_id'])) {
header("Location: http://localhost:5000/"); // Redirect to login page if not logged in
exit();
}`
чтобы проверить, кто вошел в систему, и отобразить соответствующую страницу в зависимости от типа пользователя, сеанс Python
`from flask import Flask, render_template, request, redirect, session, flash
from app import app
from db import mysql
import pymysql
import bcrypt
import uuid
app.secret_key = 'your_secret_key'
def get_db_connection():
return mysql.connect()
@app.route('/')
def index():
return render_template('login.html')
@app.route('/login', methods=['POST'])
def login():
email = request.form['email']
password = request.form['password']
user_type = request.form['user_type']
connection = get_db_connection()
try:
with connection.cursor(pymysql.cursors.DictCursor) as cursor:
sql = """
SELECT u.*, ut.user_type_name
FROM tbl_users u
JOIN tbl_user_types ut ON u.user_type_id = ut.user_type_id
WHERE u.Email = %s AND ut.user_type_name = %s
"""
cursor.execute(sql, (email, user_type))
user = cursor.fetchone()
if user and bcrypt.checkpw(password.encode('utf-8'), user['Password'].encode('utf-8')): # Verify hashed password
session['UserID'] = user['UserID']
session['UserType'] = user['user_type_name']
session['FirstName'] = user['FirstName']
session['Email'] = user['Email']
session_id = str(uuid.uuid4())
session['session_id'] = session_id
# Store session in the database
insert_session_sql = """
INSERT INTO tbl_sessions (session_id, UserID, UserType, FirstName, Email) VALUES (%s, %s, %s, %s, %s)
"""
cursor.execute(insert_session_sql, (session_id, user['UserID'], user['user_type_name'], user['FirstName'], user['Email']))
connection.commit()
if user['user_type_name'] == 'admin':
return redirect('/admin/home')
else:
return redirect('/user/home')
else:
flash('Invalid email or password')
return redirect('/')
finally:
connection.close()
@app.route('/admin/home')
def admin_home():
if 'session_id' in session:
return render_template('admin_home.html') # Ensure you have an admin_home.html template
else:
return redirect('/')
@app.route('/user/home')
def user_home():
if 'session_id' in session:
return render_template('user_home.html') # Ensure you have a user_home.html template
else:
return redirect('/')
@app.route('/logout')
def logout():
if 'session_id' in session:
session_id = session['session_id']
connection = get_db_connection()
try:
with connection.cursor() as cursor:
delete_session_sql = "DELETE FROM tbl_sessions WHERE session_id = %s"
cursor.execute(delete_session_sql, (session_id,))
connection.commit()
finally:
connection.close()
session.clear()
return redirect('/')
@app.route('/submit-user', methods=['POST'])
def submit_user():
"""
Add a new user to the database.
"""
if request.method == 'POST':
# Get form data
first_name = request.form.get('FirstName')
last_name = request.form.get('LastName')
middle_name = request.form.get('MiddleName')
age = request.form.get('Age')
contact_number = request.form.get('ContactNumber')
address = request.form.get('Address')
email = request.form.get('Email')
password = request.form.get('Password')
user_type_id = request.form.get('user_type_id')
if not all([first_name, last_name, email, password, user_type_id]):
flash("Please fill in all required fields.", "danger")
return redirect('/')
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
connection = get_db_connection()
try:
with connection.cursor() as cursor:
query = """
INSERT INTO tbl_users (FirstName, LastName, MiddleName, Age, ContactNumber, Address, Email, Password, user_type_id)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
cursor.execute(query, (
first_name, last_name, middle_name, age, contact_number, address, email, hashed_password, user_type_id
))
connection.commit()
flash("User successfully added!", "success")
return redirect('/read-all-users-html')
except Exception as e:
flash("An error occurred while adding the user. Please try again.", "danger")
print(f"User creation error: {e}")
finally:
connection.close()
if __name__ == "__main__":
app.run(debug=True)
`
по какой-то причине не переводится на php, из-за чего, когда вы правильно входите в систему и переходите, например, на домашнюю страницу администратора, он просто перенаправляется обратно на вход в систему. Может ли кто-нибудь порекомендовать мне какое-нибудь решение этой проблемы?
Я проделал некоторые работы, например, сохранил сеанс в базе данных.
```TABLE tbl_sessions (
session_id varchar(255) NOT NULL,
UserID int(11) NOT NULL,
UserType varchar(50) NOT NULL,
FirstName varchar(50) NOT NULL,
Email varchar(100) NOT NULL,
created_at метка времени NOT NULL DEFAULT current_timestamp(),
ПЕРВИЧНЫЙ КЛЮЧ (session_id),
KEY UserID (UserID),
CONSTRAINT tbl_sessions_ibfk_1 ВНЕШНИЙ КЛЮЧ (UserID) ССЫЛКИ на tbl_users (UserID) ПРИ УДАЛЕНИИ КАСКАДА
and the session is gonna be fetched to the php page but idk it still wont work.
Подробнее здесь: [url]https://stackoverflow.com/questions/79335109/login-problems-due-to-the-session-logic[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия