Order by first part by taking substring and casting to signed:
CAST(SUBSTRING_INDEX(session_number, '-', 1) AS SIGNED) ASC,
CAST(SUBSTRING_INDEX(session_number, '-', -1) AS SIGNED) ASC
Or create view of already sorted items:
CREATE VIEW v_sessions_ordered_by_session_number
AS
SELECT *
FROM sessions
ORDER BY
CAST(SUBSTRING_INDEX(session_number, '-', 1) AS SIGNED) ASC,
CAST(SUBSTRING_INDEX(session_number, '-', -1) AS SIGNED) ASC;
and then use Your view as table:
SELECT some_field, session_number FROM v_sessions_ordered_by_session_number;
But better solution is:
make session_number to be decimal like: 1.1, 1.2, 2.1 and etc
if modification of field type not allowed then just
create extra: session_number_order field and keep decimalized data