Nhờ giải thích về `express-session` và `connect-flash` trong Express
Đầu tiên bạn cần hiểu flash
và session
.
session
được dùng để lưu dữ liệu của phiên đăng nhập. Dữ liệu này sẽ được lưu trữ mãi mãi trong một phiên và có thể được sử dụng trong tất cả các request. Ví dụ khi người dùng đăng nhập thành công thì bạn lưuid
của người dùng đó và session. Tất cả các request người dùng này gửi về sau mình đều lấy được cáiid
đã được lưu ở trong session ra. Từid
lấy ra được user đã đăng nhập. Đối với mỗi người dùng thì session sẽ được lưu độc lập với nhau. Tức là giả sử người A đã đăng nhập, người B chưa đăng nhập. Thì request của người A gửi đến sẽ cóid
và request người B gửi sẽ không cóid
, kiểu như vậy. Ngoài việc lưu dữ liệu đăng nhập của người dùng ra thì bạn có thể lưu bất kỳ thứ gì cũng được. Ví dụ như giỏ hàng chẳng hạn. Đối với hệ thống mua hàng không nhất thiết yêu cầu người dùng đăng nhập thì mình có thể lưu thông tin giỏ hàng cho mỗi phiên tại session. Vì người dùng không đăng nhập thì mình sẽ không có thông tin user, mình không thể lấy thông tin gì để liên kết với thông tin giỏ hàng trong database được (nếu bạn có ý định lưu giỏ hàng trong database). Dùng session là phương pháp đơn giản và hiệu quả nhất trong trường hợp này.flash
là một khu vực đặc biệt trong session (dữ liệu của nó được lưu vào session) dùng để lưu trữ tin nhắn thông báo đến người dùng khi thực hiện thao tác nào đó. Vì nó là tin nhắn nên nó chỉ lưu và trả về response 1 lần rồi bị xóa đi. Các request sau sẽ không còn nữa. Vì sao dữ liệu này phải lưu vào session mà không phải là một biến để gửi ra view? Giả sử khi bạn tạo một sản phẩm. Sau khi tạo sản phẩm xong thì sẽ redirect đến trang danh sách sản phẩm với tin nhắn là "Tạo sản phẩm thành công". Redirect là do trình duyệt redirect chứ không phải server redirect. Server sẽ trả về một response với nôi dung header có thuộc tínhlocation
để chỉ ra rằng trình duyệt phải chuyển hướng đếnuri
là giá trị củalocation
. Đến lúc này có nghĩa là server đã trả về dữ liệu của request tạo sản phẩm. Trình duyệt sẽ gửi một yêu cầu khác đến trang danh sách sản phẩm. Đây là một request mới, làm sao server biết được người dùng đã tạo thành công sản phẩm để nhúng cái message vào nội dung trả về của trang danh sách. Lúc này phải dùng một dữ liệu lưu chung cho toàn bộ phiên đăng nhập làsession
. Từ đó khi vào trang danh sách sản phẩm server sẽ lấy được message đã được lưu trong quá trình xử lý request tạo sản phẩm để hiện ra. Đồng thời nó sẽ xóa đi vì không cần dùng nữa. Lần sau truy cập vào trang danh sách này thì sẽ không thấy message nữa.
Việc sử dụng connect-flash
và express-session
dùng để thao tác với 2 loại dữ liệu đó trên server. Bạn có thể sử dụng thư viện khác. Mình chắc là sẽ có thư viện khác . Hoặc nếu thích thì bạn có thể tự viết cho mình một cái thư viện để thao tác cho nó giống với phong cách của bạn hoặc để học tập hay gì đó. Nhưng khi đã có thư viện và nhiều người tin dùng nó thì cứ sử dụng cho chắc cú. Mình tự tạo thì sẽ gặp lỗi này lỗi kia rất mệt để có thể fix được.
Có thể sử dụng nhiều phương pháp Cache trên 1 trang Laravel
Nhiều phương pháp cache ở đây bạn nói là những phương pháp nào? database khá lớn là lớn đến mức nào?
Theo mình biết thì trong laravel có hỗ trợ lưu cache các object với nhiều driver khác khau như Database, Memcached, Redis,... Mình hay sử dụng Redis vì nó nhanh, dễ cài đặt nhưng cần phải có một server với RAM lớn.
Bạn có thể tham khảo bài viết Tăng tốc độ trang web sử dụng laravel với object caching của mình.
Nếu database của bạn cực kỳ lớn thì bạn có thể sử dụng nhiều máy chủ database để get dữ liệu. Tham khảo bài viết Nhân bản máy chủ cơ sở dữ liệu MYSQL với laravel - MySQL Replication của mình. Các câu truy vấn thay đổi database có thể cho vào Queues
để response cho người dùng nhanh hơn.
Ngoài ra bạn cần tạo index cho database cho phù hợp với cả việc tối ưu hóa câu truy vấn khi thực hiện nữa. Mình cũng có viết bài Sử dụng index để tăng tốc câu truy vấn trong mysql với laravel hi vọng sẽ giúp được bạn.
Lỗi SSH không connect được vào server
Em kiểm tra quyền đọc ghi file key đó xem sao, cả quyền của file config nữa. Em gửi cả config ssh bên client lên anh xem nào.
Host centos
HostName 192.168.1.1
User hoanghoi
IdentitiesOnly=yes
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_centos
Cần sự góp ý về bài tập in ma trận trong C
Bạn để ý rằng giá trị của phần tử trong mảng sẽ giảm từ biên vào giữa và trong khoảng từ n
đến 1
. Như vậy số lượng hàng và cột trong mảng sẽ là n * 2 - 1
. Như trong ví dụ là 4 chẳng hạn.
Xét 4 cột, 4 hàng góc bên trái ta thấy giá trị của phần tử là 4 - min(chỉ số hàng, chỉ số cột)
.
4 4 4 4
4 3 3 3
4 3 2 2
4 3 2 1
Xét 4 cột và 4 hàng góc trên bên phải thì ta thấy nó ngược lại một chút 4 - min(4 - chỉ số hàng, 4 - chỉ số cột)
4 4 4 4
3 3 3 4
2 2 3 4
1 2 3 4
Nếu gộp vào thì bạn tham khảo chương trình sau để hiểu hơn nhé:
void matran(int mang[MAX][MAX], const int number)
{
int length = (number * 2) - 1;
for (int hang = 0; hang < length; hang++)
{
for (int cot = 0; cot < length; cot++)
{
int k = i > n - 2 ? length - 1 - i : i;
int l = j > n - 2 ? length - 1 - j : j;
mang[hang][cot] = n - (k < l ? k : l);
}
}
}
int main()
{
int mang[MAX][MAX];
int number = 9;
matran(mang, number);
print(mang, length);
return 0;
}
Hỏi về nơi lưu session
Bạn dùng hàm phpinfo();
sẽ thấy nhé.
Hỏi cách tạo folder tree structure
Nếu bạn đang dùng hệ điều hành ubuntu thì có thể dùng phần mềm tree
nhé
https://askubuntu.com/questions/431251/how-to-print-the-directory-tree-in-terminal
Cài đặt: sudo apt-get install tree
Sử dụng:
- Hiển thị ra terminal:
tree /path/to/folder
- Hiển thị cây thư mục ra file:
tree /path/to/folder >> hehe.hihi
Run php artisan migrate trên Heroku error
Em cấu hình các biến env ở mục setting của app heroku nhé không cần dùng file .env đâu.
Websocket trong laravel?
Mình có 1 bài viết hướng dẫn sử dụng laravel echo ở đây nhé. Hi vọng sẽ giúp ích được bạn.