Tôi có giải pháp lưu trữ phiên dựa trên cơ sở dữ liệu. Hoạt động tuyệt vời! Tuy nhiên tôi có một vấn đề với nó lưu trữ một loại dữ liệu cụ thể.Dữ liệu tuần tự hóa PHP được lưu trữ trong lỗi db mysql
Tôi có một ứng dụng sử dụng mã thông báo CSRF. Khi một biểu mẫu được tạo, nó sẽ tạo một mã thông báo cho biểu mẫu đó. Mã thông báo là giá trị băm (sha256) của các loại giá trị khác nhau. Một bản sao đi vào biểu mẫu và một bản sao khác được lưu trữ trong các phiên. Khi gửi biểu mẫu, nó so sánh các mã thông báo để đảm bảo chúng khớp nhau.
Dưới đây là một ví dụ của hàm hủy mà cập nhật db với các dữ liệu mới
UPDATE session_manager SET variables= :variables WHERE 1=1 AND id = :id
array(2) {
[":variables"]=>
string(152) "a:1:{s:4:"CSRF";a:1:{s:8:"register";a:2:{s:5:"token";s:64:"e749603241dec1911ef3a40d98b2f5185d389434060483297394b504cc904ede";s:4:"time";i:1443456816;}}}"
[":id"]=>
string(2) "49"
}
Cập nhật tuyên bố là tốt và hoạt động tốt. Đây là vấn đề tôi có, dữ liệu được cập nhật tuy nhiên giá trị 'mã thông báo' mà bạn có thể thấy trong dữ liệu ở trên không giống với giá trị trong db bên dưới (Đây là bản tải xuống nhị phân của dữ liệu):
a:1:{s:4:"CSRF";a:1:{s:8:"register";a:2:{s:5:"token";s:64:"b48fc79fc2f51eff765c05476895238a42d9d45b2c1aeb7c6e4582d0381b7f4f";s:4:"time";i:1443456817;}}}
Có vẻ như mysql đang thay đổi giá trị và tôi không thể cho cuộc sống của tôi tìm ra vấn đề. Giải pháp Tôi đã thử bao gồm:
- serialize
- json_encode
- base64
bảng mã đang thay đổi của các db và những gì không. Đã thử các kiểu trường khác nhau trong db ví dụ TEXT, Longtext và BLOB. Mà dường như không làm việc cho tôi :(
Đây là sql cho db
CREATE TABLE session_manager(
id BIGINT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
session_id VARCHAR(200),
user_agent TINYTEXT NOT NULL,
variables BLOB NOT NULL,
initial_time DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
regenerate_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL
);
Bất kỳ lý do mà bật trong tâm trí?
Tôi không nghĩ rằng MySQL đang thay đổi giá trị của bạn.Bạn phải cho ăn cập nhật của bạn một chuỗi khác trong mã php của bạn ... bạn đang sử dụng câu lệnh chuẩn bị cho bản cập nhật của mình ... Hãy thử một 'echo $ tokenValue;' ngay trước câu lệnh cập nhật để xác minh giá trị –
Mảng bạn thấy sau khi câu lệnh cập nhật là một kết xuất của các tham số ràng buộc trước khi thực hiện truy vấn db. – Tim
Sử dụng 'Văn bản 'làm loại, nó có thể không giải quyết được vấn đề nhưng đó là một đề xuất giải quyết vấn đề. Tôi phải đối mặt với nó. –